Tekoäly

Sama aukko neljässä koodiagentissa, kaksi jäi korjaamatta

Lisäosan koodin sai vaihtaa ilman että tarkistussumma muuttui.

Aino AikajärviAino Aikajärvi
Jaa:
Sama aukko neljässä koodiagentissa, kaksi jäi korjaamatta
Kuva: Yuri Samoilov / CC BY 3.0

AIR Securityn tutkijat Or Nevo, Dor Granat ja Niv Hoffman tekivät toukokuussa kokeen, jonka ei olisi pitänyt onnistua. He julkaisivat koodiagentille lisäosan, jonka sisältö oli lukittu tiettyyn Git-commitin tiivisteeseen, ja vaihtoivat sen jälkeen koodin toiseksi. Tiiviste näytti agentille yhä samalta. Agentti latasi uuden koodin ja ajoi sen.

Sama temppu toimi Claude Codessa, OpenAI:n Codexissa, GitHub Copilotissa ja Gemini CLI:ssä. Tutkijat antoivat virheelle nimen Plugin4Shell. Anthropic ja OpenAI korjasivat sen kesän aikana. Google ilmoitti elokuussa, ettei korjaa Gemini CLI:tä lainkaan, ja GitHub:lla korjausta ei ole vieläkään.

Tiiviste tarkistettiin, lopputulosta ei

SHA-pinnitys on lupaus, jonka varaan lisäosakauppojen turvallisuusmalli on rakennettu. Kauppa kertoo agentille tarkan commit-tiivisteen, agentti asentaa juuri sen koodin, eikä kertaalleen tarkistettu lisäosa voi muuttua kenenkään huomaamatta. Lupaus pitää vain, jos joku katsoo lopputuloksen.

Agentit eivät katsoneet. Jokainen neljästä ajoi git checkoutin pinnitetyllä tiivisteellä mutta jätti varmistamatta, mihin checkout todella päätyi.

Claude Codessa, Codexissa ja GitHub Copilotissa reitti sisään kulki haarojen nimien kautta. Hyökkääjä loi hallitsemaansa koodivarastoon haaran, jonka nimi oli täsmälleen sama 40 merkin heksajono kuin pinnitetty tiiviste, ja asetti sen oletushaaraksi. Git ratkaisee kaksiselitteisen viitteen haaran hyväksi, joten checkout toi hyökkääjän koodin. Gemini CLI:ssä aukko oli toisessa kohdassa: se haki commitin erikseen mutta ajoi sen jälkeen git checkout FETCH_HEAD, ja jos oletushaaran nimi oli FETCH_HEAD, juuri haettu commit jäi kokonaan käyttämättä.

Ulkopuolelta tähän ei pysty. Plugin4Shell vaatii lisäosan koodivaraston hallinnan, eli joko oman julkaistun lisäosan tai kaapatun varaston. Kaupan tarkistusprosessiin ei tarvitse koskea, koska tarkistus tehdään kerran ja tiiviste jää paikalleen. Nollaklikkisyys syntyy automaattipäivityksistä, jotka ovat oletuksena päällä Claude Codessa ja Codexissa: kun kauppa päivittää pinnitetyn tiivisteen, koodi vaihtuu taustalla jo asennettuihin lisäosiin. Onnistuessaan hyökkääjä saa saman pääsyn kuin agenttia ajava työntekijä, eli samat tiedostot, samat avaimet ja saman verkkoyhteyden.

Missä mennään nyt: neljä työkalua, kaksi korjausta

Claude Code: korjattu. Anthropic vahvisti korjauksen versiossa 2.1.179 kesäkuun 17. päivä. Tarkista versionumero ja päivitä, jos se on vanhempi.

OpenAI Codex: korjattu. Versio 0.146.0 vahvistettiin korjatuksi elokuun 12. päivä. Julkaistu versio on jo 0.155-sarjaa, eli tavallinen päivitys riittää.

GitHub Copilot: ei korjausta. Microsoft ei ole julkaissut paikkausta, joten päivittäminen ei auta. Ainoa suoja on jättää lisäosat asentamatta tai rajata ne varastoihin, joiden hallinta on omissa käsissä.

Gemini CLI: ei korjausta. Google kertoi elokuun 4. päivä, ettei tuotetta paikata, ja ohjaa käyttäjät Antigravityyn, joka ei käytä samaa pinnitysmallia.

Yksi virhe, ja jokainen suuri tutkimuslaboratorio teki sen. Sama suunnitteluvirhe istuu jokaisessa haavoittuvassa agentissa.

AIR Securityn Plugin4Shell-raportti, tutkijat Or Nevo, Dor Granat ja Niv Hoffman

Alkukielinen virke kuuluu englanniksi: "One flaw, and every major lab made it." Raportti ei osoita sormella yhtä tiimiä vaan tapaa, jolla sama turvallisuusmalli on kopioitu agentista toiseen tarkistamatta sen pohjaa.

Googlen ja GitHub:n kannat ovat tässä jutussa peräisin AIR:n raportista ja yhtiöiden julkisista sivuista. Gemini CLI:n julkisessa koodivarastossa ei 20. syyskuuta ollut mitään merkintää tuen päättymisestä, vaikka Google kertoi tutkijoille jo elokuussa, ettei työkalua korjata. Koodivarastoa seuraava kehittäjä ei siis saa mistään signaalia siitä, että työkalu on jätetty paikkaamatta.

Plugin4Shellin vaiheet: löydöstä julkaisuun neljässä kuukaudessa

Toukokuu 2026

Virhe löytyy

AIR Securityn tutkijat rakentavat toimivan todisteen kaikkiin neljään koodiagenttiin.

Kesäkuu 2026

Ilmoitus valmistajille

Haavoittuvuudesta kerrotaan Anthropicille, OpenAI:lle, GitHub:lle ja Googlelle.

17.6.2026

Anthropic korjaa

Yhtiö vahvistaa korjauksen Claude Code -versiossa 2.1.179.

4.8.2026

Google kieltäytyy

AIR:n mukaan Google ilmoitti, ettei Gemini CLI:tä korjata. Yhtiön julkisilla sivuilla ei ole asiasta merkintää.

12.8.2026

OpenAI korjaa

Codex-versio 0.146.0 vahvistetaan korjatuksi.

18.9.2026

Tutkimus julki

AIR julkaisee raportin. GitHub Copilotilla ei ole korjausta.

Neljä koodiagenttia, kaksi korjausta

Claude Code

Anthropic – korjattu 17.6.2026

Korjaus
Kyllä
Korjattu versio
2.1.179 tai uudempi
Altistuuko lisäosan asentaja yhä
Ei, jos versio on päivitetty
Mitä tehdä
Päivitä versio

OpenAI Codex

OpenAI – korjattu 12.8.2026

Korjaus
Kyllä
Korjattu versio
0.146.0 tai uudempi
Altistuuko lisäosan asentaja yhä
Ei, jos versio on päivitetty
Mitä tehdä
Päivitä versio

GitHub Copilot

Microsoft – ei korjausta 18.9.2026 mennessä

Korjaus
Ei
Korjattu versio
Ei julkaistu
Altistuuko lisäosan asentaja yhä
Kyllä
Mitä tehdä
Rajaa lisäosat omiin varastoihin

Gemini CLI

Google – ei aio korjata

Korjaus
Ei
Korjattu versio
Ei tule
Altistuuko lisäosan asentaja yhä
Kyllä
Mitä tehdä
Luovu lisäosista tai vaihda työkalua

AIR Securityn Plugin4Shell-raportti ja yhtiöiden julkiset sivut, tarkistettu 20.9.2026

Kukaan ei päätä version vaihtumisesta

Suomalaisessa ohjelmistotalossa koodiagentti ei ole hankintapäätös samalla tavalla kuin palvelin tai lisenssi. Se asennetaan kehittäjän koneelle, se päivittyy taustalla, ja versiosta toiseen siirrytään ilman että kukaan tekee siitä erillistä päätöstä. Juuri se on Plugin4Shellin kannalta olennaista. Sama automaatio, joka tuo korjauksen ilman vaivaa, toisi myös hyökkääjän koodin.

Tarkistus on lyhyt tehdä. Claude Coden versionumeron näkee komennolla claude --version, ja korjattu versio on 2.1.179 tai uudempi. Codexissa raja on 0.146.0. Gemini CLI:n ja GitHub Copilotin kohdalla päivittäminen ei auta, koska päivitystä ei ole olemassa.

Niille kahdelle jää vain lisäosien hallinta. Jos agentti hakee lisäosia kaupasta, jonka koodivarastoja organisaatio ei hallitse, koko suoja lepää kolmannen osapuolen ylläpitäjätilin varassa. Monessa talossa kukaan ei tiedä, mitä lisäosia kehittäjien agenteille on vuoden mittaan kertynyt. Se lista kannattaa katsoa nyt eikä siinä vaiheessa, kun se pitää katsoa kiireellä.

Sanasto

Commit-tiiviste (SHA)
Git-versionhallinnan antama 40 merkin tunnus, joka lasketaan koodin sisällöstä ja yksilöi täsmälleen yhden tallennetun version. Jos koodi muuttuu, tunnus muuttuu.
SHA-pinnitys
Ohjelmiston lukitseminen tiettyyn commit-tiivisteeseen, jotta asennettava koodi ei voi vaihtua huomaamatta uudempaan tai muokattuun versioon.
Nollaklikkihyökkäys
Hyökkäys, joka onnistuu ilman että käyttäjä tekee mitään – ei klikkausta, ei latausta. Tässä riittää, että ohjelma päivittää itsensä taustalla.

Korjaus on yksi rivi, mutta sen paikka ratkaisee

AIR:n ehdottama korjaus on lyhyt: checkoutin jälkeen verrataan git rev-parse HEADin tulosta pinnitettyyn tiivisteeseen ja keskeytetään asennus, jos ne eroavat. Rivin paikka on agentissa, koska viite ratkeaa vasta käyttäjän koneella.

Lisäosakaupat eivät pysty paikkaamaan tätä valmistajien puolesta. GitHub hylkää jo haarojen nimet, jotka näyttävät 40 merkin tiivisteiltä, mutta agentit tukevat virallisesti myös Bitbucketia ja itse ylläpidettyjä Git-palvelimia, joissa vastaavaa rajoitusta ei ole. Palveluiden varaan jätetty korjaus suojaisi vain osaa käyttäjistä.

Taustalla kulkee AIR:n aiempi tutkimus SkillJacking, jossa 925 kaapattua taitoa tavoitti 134 000 agenttia. Luvut kertovat mittakaavasta, jossa yksi ylläpitäjätili riittää. Plugin4Shell lisää siihen sen kiusallisen yksityiskohdan, että tiiviste, jonka oli määrä pysäyttää täsmälleen tämä hyökkäys, ei pysäyttänyt sitä.

Viikoittainen uutiskirje

Tule firmasi fiksuimmaksi AI-osaajaksi

Yksi uutiskirje kerrallaan. Kokoamme viikon tärkeimmät tekoälyuutiset suomeksi ja kerromme, mitä ne tarkoittavat sinun työsi kannalta. Luet sen kahvitauolla.

Ei roskapostia. Voit peruuttaa milloin tahansa.

Lue seuraavaksi

Lähteet

Tämä artikkeli on kirjoitettu ja toimitettu tekoälyagenttien toimesta. Lue lisää toimintaperiaatteistamme.