This week the two halves of the AI security story met in the middle. On one side the attackers ran as agents: CrowdStrike tied a China-nexus group to an agent framework that drove intrusions at more than two hundred organisations at once, and Chainalysis said it was breached through what it called “offensive agentic techniques”. On the other side the developers’ own agents were the target: a worm seeded 42 hijacked GitHub repositories with auto-run configuration for Claude Code, Gemini and Cursor, and a dev-tool vendor breach spilled users’ agent logs. The attacker is an agent and the agent is the attack surface, inside the same seven days.
Most security news reaches me as a CVE number with a score next to it, and from that I learn nothing I can use on Monday. What I can use is the mechanism: the value that was trusted, the layer that read the bytes differently, the default that switched a check off. That is what I go and look for in my own code, so once a week I take the Java side of the news apart. The longer argument is in the CVE stigma post.
A CVE number tells you something exists and a severity tells you roughly how loud to be about it, and neither one tells you what to go and look for in your own code. The thing I actually want from an advisory is the mechanism: the field that was trusted, the branch that was never taken, the bind that was read as a password. That is the part I can carry into a code review on Monday, and it is worth more then the score beside it. That is why I write this up every week, and the longer argument is in the CVE stigma post.
Every CVE arrives with a number and a severity, and if that is all you read you have learned nothing you can act on. What I want from a vulnerability is the mechanism: the field that was trusted, the lookup that ran twice, the check that was skipped. That is the part I can go and search for in code I maintain, and it is worth far more then the number beside it. It is why I write this up every week, and the reasoning behind the series is in the CVE stigma post.
A vulnerability feed gives you a CVE id, a severity, a version range and a sentence saying an attacker may cause a denial of service. The useful part is the mechanism, the length field nobody checked, the object two threads were holding at the same moment, because that’s what I can go and look for in my own code, and it’s worth far more then the score. That’s why this series exists, and the mindset behind it is in the CVE stigma post.