A hiba a titokszkennerekben, amelyet a canary-k nem találtak meg

Szállítás

Mielőtt bármely eladott csomagot zip-be tennénk, egy kapu átvizsgálja a saját titkaink tényleges értékeire. Minden ellenőrzés canary-k beültetésével indul, minden fajtából egy-egy, és nem fut le, ha nem fogja el mindet. Mindig elkapta őket. Mégis volt benne hiba.

Hogyan olvassa a kapu a titkokat

A kapu nem csak kulcs alakú dolgokat keres. Beolvassa a fájlokat, ahol a titkaink élnek (env fájlok, JSON konfigurációk, kulcsfájlok), kiveszi minden olyan értéket, amelynek neve titokra utal, majd megkeresi a kiszállítandó anyagban ezeket a pontos értékeket, ahogy vannak, valamint base64-kódolva.

A hiba

Egy ilyen sor esetén:

DB_PASSWORD='Tr0ub4dor-and-3'  # májusban cserélve

az olvasó csak akkor távolította el a környező idézőjeleket, ha az érték idézőjellel kezdődött és végződött is. Ha az érték után komment áll, a sor egy betűvel végződik, így az idézőjelek megmaradtak. A kommentet ezután levágták, és a kapu továbbkereste a 'Tr0ub4dor-and-3' értéket, idézőjelekkel együtt. Egy olyan csomag, amely tartalmazta a jelszót ezek nélkül az idézőjelek nélkül, átment volna.

Miért vették észre soha a canary-k

A canary egy hálót tesztel: ültess be egy értéket, amelyet a szkennertől már ismersz, és ellenőrizd, hogy megtalálja-e. A canary értékeinket közvetlenül a szkenernek adtuk, így sosem mentek át azon a kódon, amely a konfigurációs sort olvassa. Minden hálót teszteltünk, de az előttük álló elemzőt nem.

Hogyan találtuk meg

A kaput önálló termékké alakítottuk, és írtunk egy tesztet, amely olyan konfigurációs fájlt adott neki, amilyeneket az emberek ténylegesen írnak: export, idézőjelek, sorvégi kommentek. A teszt elbukott az idézőjeles, kommentet tartalmazó soron. A javítás az idézőjeles értéket a záró idézőjelig olvassa, és figyelmen kívül hagyja, ami utána következik.

Számított ez?

Mielőtt bármit megváltoztattunk volna, ellenőriztük. A build gépünkön a kapu 133 titokértéket olvas ki az 59 megadott fájlból, egy második gépen pedig 499-et; egyik sem volt ilyen alakú. Nem változik egyetlen korábbi ítélet sem: minden kiadott csomagunkat ugyanazokra az értékekre szkenneltük, amelyekre most szkennelnénk. Mindenesetre mindhárom gépen javítottuk a kaput.

A tanulság

Ha egy beolvasó kinyeri azt, amit keres, akkor a kinyerést valósághű bemenettel teszteld, ne csak a keresést beültetett értékekkel. Egy canary bizonyítja, hogy a háló működik; arról however nem mond semmit, hogy a megfelelő halak eljutnak-e hozzá. A Secret Gate tesztjei most mindkettőt lefedik, és a kiadás előtt ellenőriztük, hogy pontosan ugyanazt a 133 értéket olvassa ki, mint a mi build gate-ünk.

Frissítve: