Salainen skannerimme virhe, jota canaryt eivät löytäneet

Toimitus

Ennen kuin myymämme paketti pakataan, portti skannaa sen omien salaisuuksiemme todellisten arvojen varalta. Jokainen skannaus alkaa istuttamalla canaryt, yhden kunkin tyyppisen, eikä se suostu käynnistymään, ellei se sieppaa kaikkia. Se sieppasi ne aina. Silti siinä oli virhe.

Miten portti lukee salaisuudet

Portti ei etsi vain avaimen muotoisia asioita. Se lukee tiedostot, joissa salaisuutemme asuvat (env-tiedostot, JSON-määritykset, avaintiedostot), poimii jokaisen arvon, jonka nimi kertoo sen olevan salainen, ja etsii sitten lähetettävästä paketista juuri nämä arvot sellaisina kuin ne on kirjoitettu ja base64-koodattuna.

Virhe

Tällaisen rivin kohdalla:

DB_PASSWORD='Tr0ub4dor-and-3'  # vaihdettu toukokuussa

lukija poisti ympäröivät lainausmerkit vain, jos arvo sekä alkoi että päättyi lainausmerkkiin. Kun arvon perässä oli kommentti, rivi päättyi kirjaimeen, joten lainausmerkit jäivät jäljelle. Kommentti katkaistiin seuraavaksi, ja portti jatkoi hakemalla merkkijonoa 'Tr0ub4dor-and-3', lainausmerkit mukana. Paketti, jossa salasana oli ilman näitä lainausmerkkejä, olisi päässyt läpi.

Miksi canaryt eivät huomanneet sitä

Canary testaa verkkoa: istuta skannerin jo tuntema arvo, tarkista, että se löytyy. Canary-arvomme annettiin suoraan skannerille, joten ne eivät koskaan käyneet läpi koodista, joka lukee määritysrivin. Jokainen verkko testattiin, mutta niiden edessä olevaa jäsennintä ei.

Miten löysimme sen

Olimme muuttamassa porttia omaksi tuotteekseen ja kirjoitimme testin, joka syötti sille määritystiedoston muodossa, jossa ihmiset todella kirjoittavat: export, lainausmerkit, perässä olevat kommentit. Testi epäonnistui lainausmerkillisellä rivillä, jossa oli kommentti. Korjaus lukee lainausmerkillisen arvon sen sulkemiseen asti ja jättää huomiotta kaiken sen jälkeen tulevan.

Oliko sillä väliä?

Tarkistimme ennen kuin muutimme mitään. Koneellamme portti lukee 133 salaisuutta 59:stä sille annetusta tiedostosta, ja toisella koneella 499; yksikään ei ollut tuossa muodossa. Mikään aiempi päätös ei muutu: jokainen julkaisemamme paketti skannattiin samoja arvoja varten kuin ne skannattaisiin nyt. Korjasimme portin silti kaikilla kolmella koneella.

Pääpointti

Jos skanneri poimii etsimänsä, testaa poimintaa realistisella syötteellä äläkä pelkästään hakua istutetuilla arvoilla. Kanarialintu todistaa, että verkko toimii, mutta ei kerro, päätyvätkö oikeat kalat siihen koskaan. Secret Gate -paketin testit kattavat nyt molemmat, ja ennen julkaisua varmistimme, että se lukee täsmälleen samat 133 arvoa kuin build-gatemme.

Päivitetty: