AntFleet

Disagreement · 4c349ef3-anthropic-0

S3 bucket disables all public access blocks, exposing more than the intended dashboard prefix

mismatch
repo 703f69ec·PR #3·reviewed 5 days ago

Primary finding

S3 bucket disables all public access blocks, exposing more than the intended dashboard prefix

highsecurityhigh
  • infra/stack.py:41-60
The bucket is also used for `geo-signals/feedback.csv` (potentially sensitive trading signal/feedback data) and is granted broad read by the Lambda. By turning off all four S3 Block Public Access controls AND attaching a public-read bucket policy, the bucket is now susceptible to any future bucket-policy or ACL mistake exposing non-dashboard prefixes (e.g., `geo-signals/*`). The intent (comment) is only to expose `dashboard/*`, but the configuration removes the safety net that would normally prevent accidental broader exposure. Only `block_public_policy=False` and `restrict_public_buckets=False` are required to permit the dashboard/* policy; disabling ACL blocks is unnecessary and weakens defense-in-depth.

Recommendation

Keep `block_public_acls=True` and `ignore_public_acls=True`; only set `block_public_policy=False` and `restrict_public_buckets=False` since the public access is granted via bucket policy (not ACL). Consider splitting public dashboard assets into a separate bucket from feedback/state data.

Counterpart finding

Hard-coded DynamoDB table name risks collisions across environments

lowmaintainabilityhigh
  • infra/stack.py:65-67
A fixed physical table_name can cause deployment failures or unintended reuse across accounts/stages when multiple stacks attempt to create the same named table. CDK normally generates unique names incorporating the stack.

Recommendation

Omit table_name to let CDK generate a unique name, or parameterize/suffix it with the stack name or stage (e.g., geo-trading-positions-${Stack.of(self).stackName}).

Why this didn't post

This finding didn't meet AntFleet's unanimous agreement threshold. Both frontier models review every PR independently; only findings they both flag with the same severity and category are posted to the PR. This one fell through.

read the methodology →