Tietoja julkaistiin a haavoittuvuus, joka havaittiin OpenSSH-toteutus SSH-aine joka sallii koodin ajamisen järjestelmässä, joka on antanut ssh-agentin pääsyn ssh-yhteyden toisessa päässä olevaan isäntään.
Haavoittuvuus, joka on jo luetteloitu nimellä CVE-2023-38408, se on huomattava, koska se on etäkäyttöinen. Hyökkäys mahdollista vain, jos käyttäjä on muodostanut yhteyden ssh:n kautta hyökkääjän hallitsemaan järjestelmään ottamalla käyttöön socketin edelleenlähetyksen ssh-agentille ssh:n kautta käyttämällä "-A"-vaihtoehtoa tai konfigurointitiedoston ForwardAgent-asetusta.
Ssh-agent-prosessi, jota käytetään yksityisten avainten välimuistiin julkisen avaimen todennusta varten, tukee valinnaista edelleenlähetystilaa, jonka avulla ssh-yhteyden etäpuoli voi käyttää paikallisen järjestelmän ssh-agenttia, jotta todennustietoja ei tallennettaisi muihin isäntiin.
Haavoittuvuus liittyy siihen, että ssh-agent tukee PKCS # 11 -moduulien lataamista, joka voidaan käynnistää muun muassa unix-socketin kautta, joka välitetään toiseen järjestelmään ssh-agentille.
Tämä ominaisuus sallii isäntäkonetta hallitsevan hyökkääjän johon se on kytketty lataa ja pura välittömästi kaikki jaetut kirjastot uhrin paikallisen järjestelmän /usr/lib*-hakemistoista erillisessä ssh-pkcs11-helper-prosessissa. Tämä ominaisuus näkyy ssh-agentissa, joka on käännetty ENABLE_PKCS11-vaihtoehdolla, joka on oletuksena käytössä.
Alun perin mahdollisuutta ladata jaettuja kirjastoja ei pidetty uhkana varmuuden vuoksi, koska lataaminen on mahdollista vain /usr/lib*-järjestelmähakemistoista, jotka sisältävät jakelun virallisesti toimittamia kirjastoja, ja toiminta näiden kirjastojen kanssa rajoittuu dlopen()- ja dlclose()-funktioiden kutsumiseen kutsumatta kirjaston toimintoja.
Kuitenkin, unohdettu, että joissakin kirjastoissa on rakentaja- ja hävittäjätoimintoja joita kutsutaan automaattisesti dlopen()- ja dlclose()-operaatioita suoritettaessa. Tämä voi riittää poimimaan tarvittavat kirjastot ja järjestämään koodin etäsuorituksen.
Hyökkäyskyky näkyy mm oletusympäristö ubuntu, koska ei testattu muissa jakeluissa, joka myös asentaa kolme pakettia "universe"-varastosta (vaikka oletetaan, että joissakin jakeluissa on mahdollista hyökätä oletuskokoonpanossa).
Hyökkäyksestä ehdotettiin 8 muunnelmaa.
Esimerkiksi yksi lupaavista vaihtoehdoista toimivan exploitin luomiseen perustuu siihen, että libgnatcoll_postgres.so-kirjasto, kun suoritetaan dlopen(), rekisteröi erillisen signaalinkäsittelijöissä käytetyn signaalipinon kutsumalla sigaltstack()-funktiota ja dlclose()-kutsun jälkeen varaa muistin, mutta ei poista signaalin kirjaamista (SS_stack-logging).
Hyödyntämään haavoittuvuutta suoritetaan seuraavat manipulaatiot:
- Erilaisia kirjastoja ladataan muuttamaan mmap-asettelua.
- Kirjasto libgnatcoll_postgres.so ladataan, vaihtoehtoinen signaalipino rekisteröidään ja munmap() suoritetaan.
- Kirjastot ladataan muuttamaan mmap:n asettelua ja korvaamaan erillisen signaalipinon toisella kirjoitustilan muistialueella (esimerkiksi stream-pino tai .data/.bss-segmentit).
- Lataa kirjaston, joka rekisteröi SA_ONSTACK-signaalinkäsittelijän, mutta ei rekisteröi sitä munmap():lla, kun dlclose()-funktiota kutsutaan.
- Kirjasto, joka vastaanottaa signaalin ja kutsuu SA_ONSTACK signaalinkäsittelijää, ladataan, jolloin korvattu muistialue ylikirjoitetaan signaalinkäsittelijän pinokehyksillä.
- Kirjastot ladataan korvaamaan korvatun muistialueen sisällön.
Haavoittuvuudesta on syytä mainita, että tämä korjattiin OpenSSH 9.3p2 -julkaisussa äskettäin julkaistu. Uudessa versiossa PKCS#11-moduulien latauspyynnöt on oletusarvoisesti poistettu käytöstä. Suojauksen kiertotapana voit määrittää tyhjän PKCS#11/FIDO sallittujen luettelon (ssh-agent -P ») käynnistäessäsi ssh-agentin tai määrittää erikseen sallitut kirjastot.
Lopuksi, jos olet kiinnostunut saamaan lisätietoja siitä, voit tutustua yksityiskohtiin osoitteessa seuraava linkki.