ThreatsDay Bulletin: Pre-Auth Chains, Android Rootkits, CloudTrail Evasion & 10 More Stories

DevSecOps Incident Post-Mortem: Common Misconfigurations and How to Fix Them
Last updated: 2024-06-17 • Author: Chris Mayer, Principal SRE/DevSecOps Lead (12+ yrs, ex-Netflix, Elastic, CNCF contributor) • GitHub • Contact
Meta: Developers aren’t paid to clean up dumpster fires—but you’re going to do it regardless. Here’s a raw, technical account of the security slip-ups we keep repeating, practical fixes, and the detection queries nobody bothers to run.
Quick Remediation Checklist
Stop skimming. Copy-paste this into your team Slack—execute in the next 24 hours or risk starring in next week’s breach report.
- Audit and revoke IAM policies with wildcards (
*:*) usingaws iam simulate-principal-policy - Lock down S3:
aws s3api get-bucket-acl, enable BlockPublicAccess, check policies forPrincipal: "*" - Scan infra-as-code with Checkov, tfsec before merging to main
- Harden kubelet: disable
--anonymous-auth, restrict port 10250/10255, runkubectl auth can-i --list - Enforce container securityContext:
runAsNonRoot: true,readOnlyRootFilesystem: true - Rotate secrets and keys ASAP; verify with AWS Secrets Manager/Credential Reports
- Enable CloudTrail multi-region, log file integrity validation:
aws cloudtrail describe-trails,aws cloudtrail update-trail --enable-log-file-validation - Run Dependabot/GitHub Advanced Security on all repos
- Quarantine and scan new npm/pip packages; prefer vetted sources only
Another Day, Another Pre-Auth RCE Chain Ruining Your Morning
Let’s put the myth to rest: breaches aren’t “highly sophisticated”—they’re the same rookie mistakes punched into prod again and again. Case in point:
Misconfigured Kubelet & Istio: Real Incident, Sanitized
Source: Redacted post-mortem (Fortune 500 fintech, 2023)
Here’s how $5 million vanished in 18 hours:
- Kubelet insecure port (10255) exposed to the internet with
--anonymous-auth=true - Istio’s PeerAuthentication resource set as
mtls: DISABLE, letting unauthenticated gRPC API calls waltz into microservices - Attacker saw public kubelet, listed pods, deployed cryptominer, exfiltrated billing info
Post-mortem labeled it “sophisticated actor activity.” Reality? No RBAC on kubelet, no network policy, root containers everywhere.
Why We Keep Falling for This
Human Error: The Unpatched Second Brain
Nobody wanted to be on-call for an S3 bucket ACL review after hours. So, someone left PublicAccessBlock disabled and the bucket policy read Principal: "*"—one missed terraform scan, and your cost center is front-page news. Example: 2021 Verkada breach.
The Architecture Nightmare Nobody Wants to Fix
Your “serverless” app is a labyrinth of Lambda functions with IAM policies that could light up the whole AWS account. Overprivileged roles (iam:PassRole + ec2:*) are the norm. You don’t enforce boundaries; you trust defaults.
Detection:
aws iam list-policies | grep '*:*'
aws iam simulate-principal-policy --policy-source-arn <role-arn> --action-names '*'
Remediation:
- Run IAM Access Analyzer weekly
- Set Permission Boundaries and review them in PRs
- Use Open Policy Agent to enforce least privilege in CI
Dependency Hell Is Real
npm supply chain attacks aren’t hypothetical. Event-Stream hijack, Fastify crypto miner. You install what looks innocent, and suddenly your SOC is chasing callbacks it doesn’t recognize.
Remediation:
- Dependabot auto-opens PRs for vulnerable deps
- Use OSS SCA tools, scan before deploying
- Pin versions, vet transitive deps, monitor for CVE alerts
Stop Trusting Defaults
AWS SQS supports SSE with KMS—yet plaintext queues are still everywhere. S3 buckets with BlockPublicAccess off are easier to find than Starbucks locations. Default container images run as root, and “just for testing” becomes “in prod for six months.”
Detection:
aws s3api get-bucket-acl --bucket <YOUR_BUCKET>
aws s3api get-bucket-policy --bucket <YOUR_BUCKET>
aws sqs get-queue-attributes --queue-url <YOUR_QUEUE> --attribute-name KmsMasterKeyId
kubectl get pods -o yaml | grep 'securityContext'
Remediation:
- Enable S3 BlockPublicAccess on every bucket
- Encrypt SQS with customer-managed KMS keys
- Set container
securityContext.runAsNonRoot: true,readOnlyRootFilesystem: true

Detection Queries You Should Actually Run
CloudTrail Threat Hunting
Detect suspicious manipulation of event selectors (CloudTrail PutEventSelectors abuse):
aws cloudtrail lookup-events --lookup-attribute AttributeKey=EventName,AttributeValue=PutEventSelectors
See AWS advisory for post-abuse detection.
Kubelet Exposure
Check if kubelet anonymous-auth is enabled:
kubectl get nodes -o yaml | grep 'anonymous-auth'
netstat -plnt | grep 10255
Reference: Kubernetes Hardening Guide (NSA/CISA)
Lambda Invocation Anomaly (CloudWatch Logs Insights)
fields @timestamp, @message
| filter @message like /Invoke/
| stats count() by function_name
| sort by count() desc
References and Further Reading
- CIS Kubernetes Benchmark
- AWS Well-Architected Security Pillar
- MITRE ATT&CK Cloud Matrix
- OWASP Top Ten
- NIST Cybersecurity Framework
- Google TAG Android rootkit campaign
- CISA CloudTrail Evasion Advisory
Author
Chris Mayer, Principal SRE/DevSecOps Lead. I’ve spent 12 years building, breaking, and securing everything from Netflix’s streaming backend to Elastic’s SaaS. CNCF contributor. See code, docs, and scars at GitHub. Contact: chrismayer@sresec.io.
Legal & Attribution
All incident anecdotes are sanitized composites or anonymized real events (details redacted to avoid NDA breaches). If you see your infra here—fix it and thank your lucky stars it wasn’t public.
Patch your crap. Rotate your keys. The next “sophisticated” breach is already inbound—you just haven’t found your debug logs yet. Who’s betting you’re not tomorrow’s headline?