Գաղտնիքների սկաների սխալը, որը կանարները չգտան
Առաքում
Մինչ մեր վաճառած ցանկացած հավաքածուի փաթեթավորումը, պահպանիչը սկանավորում է այն մեր սեփական գաղտնիքների իրական արժեքների համար։ Յուրաքանչյուր սկանավորում սկսվում է կանարների տեղադրումով՝ յուրաքանչյուր տեսակից մեկական, և չի գործարկվում, եթե դրանցից բոլորը չհայտնաբերվեն։ Այն միշտ գտնում էր դրանք։ Բայց սխալ կար։
Ինչպես է պահպանիչը կարդում գաղտնիքները
Պահպանիչը միայն բանալու տեսք ունեցող բաներ չի փնտրում։ Այն կարդում է այն ֆայլերը, որտեղ պահվում են մեր գաղտնիքները (env ֆայլեր, JSON կոնֆիգուրացիաներ, բանալիների ֆայլեր), վերցնում է յուրաքանչյուր արժեք, որի անունը ցույց է տալիս, որ այն գաղտնի է, և ապա փնտրում է այդ ճիշտ արժեքները նրանում, ինչ պատրաստվում ենք ուղարկել՝ ինչպես գրված, այնպես էլ base64-ով կոդավորված։
Սխալը
Այսպիսի տողի համար՝
DB_PASSWORD='Tr0ub4dor-and-3' # փոխվել է մայիսին
ընթերցողը հեռացնում էր շրջապատող չիկանները միայն այն դեպքում, երբ արժեքը սկսվում և ավարտվում էր չիկանով։ Երբ արժեքից հետո մեկնաբանություն կար, տողը ավարտվում էր տառով, ուստի չիկանները մնում էին։ Մեկնաբանությունը հաջորդը կտրվում էր, և պահպանիչը շարունակում էր փնտրել 'Tr0ub4dor-and-3'՝ չիկաններով։ Այն հավաքածուն, որը պարունակում էր գաղտնաբառն առանց այդ չիկանների, կանցներ։
Ինչու կանարները երբեք չնկատեցին
Կանարը ստուգում է ցանցը. տեղադրում եք արժեք, որը սկաներն արդեն գիտի, և ստուգում, որ այն գտնվում է։ Մեր կանարների արժեքները ուղղակիորեն տրվում էին սկաներին, ուստի դրանք երբեք չէին անցնում կոնֆիգուրացիայի տողը կարդացող կոդի միջով։ Յուրաքանչյուր ցանց ստուգված էր, բայց դրանց առջևի պարսերը՝ ոչ։
Ինչպես գտանք այն
Մենք պահպանիչը վերածում էինք առանձին արտադրանքի և գրեցինք թեստ, որը նրան մատուցում էր կոնֆիգուրացիոն ֆայլ՝ այն տեսքով, ինչպես մարդիկ իրականում գրում են. export, չիկաններ, վերջնական մեկնաբանություններ։ Թեստը ձախողվեց մեկնաբանությամբ չիկանավորված տողի վրա։ Ուղղումը կարդում է չիկանավորված արժեքը մինչև փակող չիկանը և անտեսում է հաջորդող ամեն ինչը։
Կարևո՞ր էր դա։
Մենք ստուգեցինք մինչև ցանկացած փոփոխություն կատարելը։ Մեր բիլդ մեքենայում պահպանիչը կարդում է 133 գաղտնի արժեք տրված 59 ֆայլերից, իսկ երկրորդ մեքենայում՝ 499. ոչ մեկը չուներ այդ տեսքը։ Ոչ մի նախկին որոշում չփոխվեց. մեր թողարկած բոլոր հավաքածուները սկանավորվել են նույն արժեքների համար, որոնց համար կսկանավորվեին հիմա։ Մենք այնուամենայնիվ ուղղեցինք պահպանիչը բոլոր երեք մեքենաներում։
Հիմնական եզրակացությունը
Եթե սկաները հանում է այն, ինչ փնտրում է, ստուգեք հանումը իրատեսական մուտքային տվյալներով, ոչ թե միայն որոնումը՝ նախապես տեղադրված արժեքներով։ Կանարը ապացուցում է, որ ցանցը աշխատում է, բայց ոչինչ չի ասում նրա մասին, թե արդյոք ճիշտ ձուկը երբևէ հասնում է դրան։ Secret Gate-ի թեստերն այժմ ծածկում են երկուսն էլ, և թողարկումից առաջ մենք ստուգել ենք, որ այն կարդում է ճիշտ նույն 133 արժեքները, ինչ մեր build gate-ը։