Under ungefär 108 timmar maskintid i augusti 2026 körde en enda volontärkampanj en modell med öppna vikter genom 501 open source-projekt i Bitcoin-ekosystemet och loggade 7 958 potentiella säkerhetsfynd, varav 1 280 klassade som höga eller kritiska. Vi skrev om den kampanjen — och förordningen den kolliderar med — i Maskinerna läser koden. Denna anteckning handlar om själva siffran.
För en säkerhetsleverantör har publicerat ett riktmärke som ställer tre AI-kodgranskningssystem mot en privat testapplikation: ett hittade 68 av 89 utplanterade sårbarheter, ett annat 60, ett tredje 58. Leverantörerna konkurrerar nu om det förhållandet — fler fynd, till lägre kostnad. Att hitta har blivit en handelsvara i ett priskrig.
Så det är värt att säga rakt ut vad ett fynd egentligen är — för räkningen mäter fel sak.
Ett fynd är ett vittne, inte en dom
Textvetenskapen avgjorde detta för fem sekler sedan, och dess ord är exakt.
När en antik text överlever i många handkopierade manuskript är ingen enskild kopia texten. Var och en är ett vittne: ett härlett dokument som bär originalet — plus skrivarens felskrivningar, vanor och ärvda glidningar. Att tre manuskript stämmer överens kan betyda att läsarten är äkta — eller att alla tre härstammar från samma felaktiga förlaga. Disciplinen som reder ut detta producerar en textkritisk utgåva: texten så gott den kan fastställas, med en apparat under som bokför varje vägt vittne, varje variant, varje redaktionellt avgörande och dess skäl.
Ett AI-genererat sårbarhetsfynd är ett vittne i exakt den meningen. Det är inte defekten. Det är en modells rapport om en defekt — kodens verkliga egenskaper blandade med modellens vanor, dess träningshärkomst och prompten som producerade den. Att två skannrar stämmer överens kan betyda att buggen är verklig — eller att båda delar samma blinda fläckar och samma mallar. Tränade på i stort sett samma offentliga korpus gör de ofta det. Samstämmighet mellan korrelerade vittnen är belägg om vittnena, inte om koden.
Och textvetarnas mest mödosamt vunna regel överförs intakt: den flytande läsarten är den misstänkta. Skrivare slätar ut ett svårt ställe till en bekväm klyscha, och den släta versionen är oftare kopistens förbättring än författarens ord. En sårbarhetsrapport har en fast genre: titel, svaghetsklass, allvarlighetsgrad, en hänvisning, ett stycke ”en angripare skulle kunna…”. En språkmodell producerar den formen övertygande — vare sig defekten finns eller inte. Poleringen bär ingen information om sanningen. I denna genre är flyt ingen merit. Det är det som ska kontrolleras.
Därför är räkningen fel enhet. Den räknar vittnen och rapporterar dem som domar.
Allvarlighetsgraden är där rapporterna överdriver
Inflationen är inte jämnt fördelad. Den koncentreras till en punkt, av ett strukturellt skäl värt att namnge.
”Den här funktionen jämför en tidsstämpel i millisekunder med en kolumn i sekundupplösning” är ett påstående som hänvisar till något — en fil, en rad, en commit. Man kan öppna det och avgöra det på en minut. ”Kritisk” hänvisar till ingenting. Det finns ingen kodrad där det står Kritisk. Allvarlighetsgrad är ett omdöme om nåbarhet, utnyttjbarhet och sprängradie — och eftersom den saknar ankare i källkoden är den exakt platsen där en flytande generator driver uppåt utan motstånd. Den dramatiska läsarten är den lättare; varje incitament i rapportkedjan belönar den större siffran; och inget i artefakten gör motstånd.
Så när en kampanj rapporterar 1 280 fynd ”höga eller kritiska” är den ärliga läsningen: 1 280 fynd som en generator etiketterat så. Etiketten är dokumentets minst kontrollerbara fält — och det är den som gör grovjobbet i rubriken.
Är de utnyttjbara? Ingen har sagt det ännu
Mellan ett fynd och en defekt ligger ett steg som räkningen hoppar över: prövningen — att avgöra vilka fynd som är verkliga, vilka som är nåbara, vilka som spelar roll. Det steget är fortfarande mänskligt, och det skalar inte med genereringen.
Den tydligaste offentliga mätningen av vad som händer när det hoppas över kommer från curl. Dess sjumanna volontärsäkerhetsteam såg andelen bekräftade sårbarhetsrapporter falla från över 15 % till under 5 % när AI-assisterade inlämningar började anlända — varje grundlös rapport kostade fortfarande timmar att vederlägga. En kom komplett med GDB-sessioner och registerdumpar för en HTTP/3-exploit i en funktion som inte finns i curl. Underhållaren beskrev triagebördan som ”liktydig med en DDoS” (”tantamount to a DDoS”), och till slut stängde projektet sitt bug bounty-program — med beskedet att det inte sett en enda giltig säkerhetsrapport producerad med AI-hjälp.
Läs den siffran åt rätt håll. Den bevisar inte att AI-fynd är värdelösa — den bevisar att ett fynds flyt och dess giltighet är oberoende av varandra, och att signal-brusförhållandet kollapsar när prövningssteget tas bort. Rapporterna blev fler och mer självsäkra; andelen som överlevde kontroll gick ned.
Floden är ett säkerhetsproblem, inte ett irritationsmoment
Det är frestande att sortera ”för många fynd” under besvär. Det vore fel. När genereringen springer ifrån prövningen försvinner inte det verkliga fyndet — det begravs i kön bakom tvåhundra plausibla, och en kö ingen kan beta av är en kö som gömmer saker. curls ord — DDoS — är rätt register. Ett team som drunknar i självsäkra rapporter är inte säkrare än ett team utan rapporter; det är ett team vars uppmärksamhet förbrukats på vittnen som aldrig korsförhördes.
Håll isär de två larmen
Två påståenden blandas ihop här, och att skilja dem åt är hela disciplinen.
I aggregatet är faran verklig. Det finns genuint enorma mängder orättade defekter i gammal kod, och en billig, outtröttlig letare kommer att lyfta fram några av dem. Att avfärda hela kategorin som hajp är fel.
Per fynd är den angivna kritikaliteten systematiskt överdriven — uppåt, eftersom det enda fält ingen kan kontrollera är det alla blåser upp. Att behandla varje larm som en dom är också fel — åt andra hållet.
Felet är att besvara den enas fråga med den andras larm. ”Många verkliga buggar finns någonstans i detta ekosystem” gör inte detta fynd på er rad utnyttjbart. Och ”de flesta av just dessa larm är brus” betyder inte att er kodbas är ren.
Vad som ser igenom det
Den medeltida utgivaren kunde inte sanera hela traditionen. Vad han kunde göra: fästa villkor vid varje läsart och göra villkoren explicita. Samma drag fungerar här. När någon räcker er ett fynd, fråga:
- Vilket evidenssteg når det faktiskt? Spårat i källkoden, kompilerat, testat eller reproducerat i körning — det är inte samma påstående. Ett fynd bör aldrig bära en högre visshet än arbetet bakom det.
- Är det nåbart i er build, eller nåbart i princip? Allvarlighetsgrad utan nåbarhetsargument är en sinnesstämning, inte en mätning.
- Prövades det, eller medelvärdesbildades det? Att tre verktyg stämmer överens är inte tre bekräftelser om verktygen delar en blind fläck. Ett minoritetsfynd är värt en billig orakelkontroll — kör testet, läs specifikationen, exekvera vägen — inte en omröstning.
- Är det redan åtgärdat, eller redan känt? Ett fynd som underhållarna stängde förra månaden är ett vittne om historien, inte om er risk.
Inget av det är exotiskt. Det är vad en textkritisk utgåva gör med en hög manuskript: kollationera vittnena, pröva dem mot belägg starkare än ännu en åsikt, och behålla apparaten — omdömena, osäkerheten, läsarterna som övervägdes och förkastades.
Alla döda fynd dog inte samma död
De flesta fynd överlever inte. Det är normalt, och det är poängen — men hur ett fynd dog är information, och en granskning som tippar alla i en och samma låda märkt ”avfärdade” har kastat bort den informationen.
Textvetenskapen skiljer på fallen, och distinktionen är gammal nog att ha ett namn. Ett manuskript som visats vara kopierat från ett annat bevarat manuskript stryks helt ur räkningen — eliminatio codicum descriptorum — inte för att det är fel, utan för att det inte tillför något oberoende vittnesmål. Dess samstämmighet var aldrig belägg.
Tre dödssätt, och de betyder inte samma sak:
- Redundant. Flera verktyg producerade samma fynd. Där verktygen inte är oberoende — och eftersom de delar träningsdata och mallar är de det ofta inte — är deras samstämmighet en läsart i tre kopior snarare än tre bekräftelser, och att räkna den tre gånger är så falsk trygghet tillverkas. Stryk dubbletterna, men bokför oberoendeantagandet i stället för att anta bort det: samstämmighet mellan genuint oberoende granskare är inte ingenting.
- Falskt. Fyndet säger att koden gör något som koden inte gör. Avgörs genom att öppna filen. Det är den enda kategori de flesta har i åtanke när de säger ”falskt positivt”.
- Sant, men om en text som inte längre finns. Fyndet är korrekt — om en revision som sedan dess rättats. Vittnet är ärligt; koden rörde sig under det. En defekt som stängts vid en fäst uppströmsrevision är inte ett falskt positivt för den revisionen och bör inte bokföras som ett. Det gäller bara om fyndet säger vilken revision det läste: en rapport som inte kan namnge sin revision är inget ärligt vittne om en passerad text — det är ett förlegat påstående om den nuvarande.
Bara det andra är ett fel i själva läsarten; det ofästa fallet av det tredje är ett fel i kedjan som rapporterade det. Ett protokoll som säger vilken död varje fynd dog kan revideras av någon som inte var där. Ett förhållande — ”vi triagerade tvåhundra fynd ned till sex” — kan det inte, och det är inte heller en kvalitetssignal: en lat kedja når det förhållandet genom att generera skräp och kasta det. Elimineringen är inte produkten. Beläggen bakom de överlevande är det.
Vad en utgåva är till för
Skälet att bygga en utgåva i stället för en lista är att någon måste nå en dom, och det blir inte granskaren.
En underhållare avgör om det ska patchas. En tillverkare avgör vad som går in i den tekniska dokumentationen. En företagskunds säkerhetsteam avgör om de skriver under. Var och en av dem når en dom, och var och en kommer senare att ombes — av någon mindre vänlig, med mer tid — att visa hur den nåddes. Vad de behöver från en granskare är inte ännu en åsikt att väga. Det är beläggen, ordnade så att deras eget beslut överlever frågandet.
I Europa håller detta på att bli lagkrav snarare än god sed. Cyberresiliensförordningen kräver att tillverkare ”tillämpa[r] effektiva och regelbundna provningar och granskningar av säkerheten hos produkten med digitala element” (bilaga I del II punkt 3), och den tekniska dokumentationen måste innehålla ”rapporter om de provningar som utförts för att kontrollera” överensstämmelsen (bilaga VII punkt 6) — bevarade i minst tio år efter utsläppandet på marknaden, eller under stödperioden om den är längre (artikel 13.13). Artikel 14-rapporteringen av aktivt utnyttjade sårbarheter och allvarliga incidenter börjar den 11 september 2026; förordningen tillämpas fullt ut från den 11 december 2027.
Läs vad som faktiskt efterfrågas. Inte en ren skanning, och inte en låg siffra. En rapport om utförda provningar, bevarad ett decennium, läsbar för någon som inte var i rummet. En lista med fynd klädda i självsäkra allvarlighetsgrader, utan apparat under och utan protokoll över vad som förkastades och varför, överlever inte den läsningen. En utgåva gör det — för varje påstående namnger beläggen bakom sig, varje eliminerad läsart bokförs med sitt skäl, och varje rättelse sker skriftligt.
Skyldigheterna vilar på tillverkaren, inte på en extern granskare. En extern granskning av det slag som beskrivs här stödjer den tekniska dokumentation ni sammanställer; den är inte hela akten, och den ersätter inte ett anmält organs bedömning av överensstämmelse där förordningen kräver en. Men den är den del av akten som är svårast att producera om det egna arbetet — för den enda egenskap den måste bära är att någon annan än ni skrev den.
Varför det angår oss
På CounterProof bedriver vi adversariell granskning av maskinskriven kod, och dessa frågor är inte teoretiska för oss — de är våra driftregler. Fynd prövas i stället för att medelvärdesbildas; varje påstående namnger det evidenssteg det nådde, och inget högre; ett fynd som redan rättats uppströms dras tillbaka i stället för att räknas; och när ett av våra egna påståenden inte överlever återkallar vi det skriftligt, offentligt (på engelska). Vi säljer inte ett antal fynd, och vi skulle råda er att inte köpa på ett. Skannrarna är skrivare, och skriptoriet går numera dygnet runt för växelpengar. Det knappa var aldrig kopian. Det är utgåvan.
Det längre argumentet — inklusive den villkorade formen av varje påstående ovan och gränserna för vår egen metod — finns i vårt arbetspapper om kollationering och proveniens för maskingenererad text, läsbart i sin helhet här (på engelska). Det är ett utkast till preprint, inte referentgranskat, och det säger det.
Siffrorna ovan är källbelagda: kampanjen över 501 projekt dokumenteras i vår tidigare anteckning; de tre systemens riktmärkesförhållanden kommer från leverantörens publicerade inlägg; curls bekräftelseandel, rapporten om fantomfunktionen och stängningen av dess bounty-program rapporteras av The New Stack, BleepingComputer och The Register. Hänvisningar till cyberresiliensförordningen avser förordning (EU) 2024/2847 i den officiella svenska språkversionen — samma bestämmelser som vi bär på vår startsida. Där ett påstående är vår slutledning snarare än ett citerat fynd — att allvarlighetsgraden inflateras uppåt, att flyt och giltighet är oberoende — har vi sagt det. Denna sida är en översättning av det engelska originalet; vid avvikelser gäller originalet. Om något här är fel rättar vi det skriftligt på denna sida.