.agents/skills/security-advisory-lessons/SKILL.md
Use this skill as a RustFS-specific security lens before changing or approving code. For the current advisory snapshot and full pattern map, read advisory-patterns.md.
When currentness matters, refresh the advisory inventory first:
gh api repos/rustfs/rustfs/security-advisories --paginate \
--jq '.[] | {ghsa_id,state,severity,summary,updated_at,html_url}'
For the full pattern map, read advisory-patterns.md.
rustfs/src/admin/, rustfs/src/storage/, rustfs/src/auth.rs, rustfs/src/server/layer.rs, crates/iam/, crates/policy/, crates/credentials/, crates/ecstore/src/rpc/, crates/rio/, and console preview/auth code.validate_admin_request or the established equivalent with the right AdminAction.Resource scoping constrains blast radius unless the policy engine actually enforces resources for that action.parent, claims, accessKey, secretKey, status, policy names, and groups.deny_only or "no explicit deny" become an allow decision that skips required allow checks.GetObject and destination PutObject semantics equivalent to CopyObject, including copy-source and policy conditions.CreateMultipartUpload, UploadPartCopy, CompleteMultipartUpload, or AbortMultipartUpload return success without authorization.content-length-range, key prefix, exact metadata/content-type, and all signed policy conditions..., absolute paths, URL-encoded traversal, platform separators, empty components, and paths that canonicalize outside the intended root.Debug implementations, ?value tracing, merged config dumps, and dependency-level HTTP body logging as leak surfaces.unwrap, expect, and panic-prone deserialization with typed errors.Origin while also allowing credentials. Default CORS should be no CORS unless explicitly configured.nosniff, CSP, strict content-type handling, and avoiding durable credentials in localStorage.X-Forwarded-For or X-Real-IP when the request came from a configured trusted proxy.aws:SourceIp and policy condition evaluation.Use these prompts while reviewing a diff:
CopyObject vs UploadPartCopy, and do all paths enforce the same security contract?