Бубачката во нашиот таен скенер што канаринците не можеа да ја најдат

Испорака

Пред секој комплет што го продаваме да се компресира, порта го скенира за вистинските вредности на нашите тајни. Секое скенирање почнува со поставување канаринци, по еден од секој вид, и одбива да работи освен ако не ги фати сите. Секогаш ги фати. Сепак имаше бубачка.

Како портата ги чита тајните

Портата не бара само нешта со облик на клучеви. Таа ги чита датотеките каде што живеат нашите тајни (env датотеки, JSON конфигурации, датотеки со клучеви), ги зема сите вредности чието име вели дека се тајни, и потоа бара во она што треба да го испорачаме точно тие вредности, како што се напишани и base64-кодирани.

Бубачката

За линија како оваа:

DB_PASSWORD='Tr0ub4dor-and-3'  # ротирана во мај

читачот ги отстрануваше надворешните наводници само кога вредноста и почнуваше и завршуваше со знак за наводник. Со коментар после вредноста, линијата завршува со буква, па наводниците останаа. Коментарот потоа беше исечен, а портата продолжи да бара 'Tr0ub4dor-and-3', вклучувајќи ги и наводниците. Комплет што содржеше лозинка без тие наводници би поминал.

Зошто канаринците никогаш не го забележаа тоа

Канаринецот тестира мрежа: постави вредност што скенерот веќе ја знае, провери дали е најдена. Нашите вредности на канаринците беа дадени директно на скенерот, па тие никогаш не поминаа низ кодот што чита линија од конфигурација. Секоја мрежа беше тестирана, но парсерот пред нив не беше.

Како го најдовме тоа

Ја претвортиме портата во производ за себе, и напишавме тест што ѝ подаде конфигурациска датотека во облици што луѓето навистина ги пишуваат: export, наводници, коментари на крајот. Тестот не помина на линијата со наводници и коментар. Поправката чита вредност во наводници до нејзиниот затворачки наводник и игнорира сè што следи.

Дали имаше значење?

Проверивме пред да смениме било што. На нашиот компјутер за изградба, портата чита 133 тајни вредности од 59-те датотеки што ѝ се дадени, а на втор компјутер 499; ниту една немаше таков облик. Ниту една претходна пресуда не се менува: секој комплет што сме го објавиле беше скениран за истите вредности за кои би се скенирал сега. Сепак, ја поправивме портата на сите три компјутери.

Заклучокот

Ако скенерот го извлекува она што го бара, тестирајте го извлекувањето со реален влез, а не само пребарувањето со намерно поставени вредности. Канаринот докажува дека мрежата работи; но не кажува ништо за тоа дали соодветните риби воопшто стигнуваат до неа. Тестовите на Secret Gate сега ги покриваат двете, а пред неговото објавување проверивме дека ги чита точно истите 133 вредности како и нашиот build gate.

Ажурирано: