
LinkedIn-ի աշխատանքի առաջարկում թաքնված backdoor. ինչպես գործեց ծուղակը
Աշխատանքի առաջարկի շրջանակում GitHub-ի պահոցը վերանայելու խնդրանք ստացած մշակողը հայտնաբերեց թաքնված backdoor, որը գործարկվում է npm install-ի ժամանակ։ Պահոցի commit-երը և «ռեքրութերի» պրոֆիլը պատկանում էին իրական մարդկանց, որոնք չէին աշխատել նախագծի վրա։
2026 թվականի հունիսի սկզբին full-stack մշակող Ռոման Իմանկուլովը LinkedIn-ում հաղորդագրություն ստացավ փոքր կրիպտո ստարտափի «ռեքրութերից»։ Մի քանի օր նամակագրությունից հետո նա նկարագրեց կիսատ proof-of-concept, որի համար առաջատար ինժեներ էին փնտրում, և ուղարկեց հանրային GitHub-ի պահոց՝ խնդրելով «նայել հնացած Node մոդուլների խնդիրը»։ Ուրիշի կոդը վերանայելը սովորական բան է, սակայն ինչ-որ բան կասկած հարուցեց, և նա որոշեց ավելի զգույշ լինել։
Փոխարենը, որ պահոցը կլոնավորեր ու կախվածությունները տեղադրեր սեփական մեքենայի վրա, նա Hetzner-ում ժամանակավոր VPS բարձրացրեց, այնտեղ կլոնավորեց կոդը և Pi անունով AI-ագենտը միացրեց միայն ընթերցման ռեժիմով՝ ֆայլեր կարդալու գործիքներով (read, grep, find, ls)։
Ծուղակը թեստային ֆայլի ներսում
Ագենտը գրեթե անմիջապես կանգ առավ app/test/index.js ֆայլի վրա։ Պահոցը React-ի frontend-ի ու Node backend-ի տպավորություն էր թողնում, իսկ ծուղակը մոտ 250 տող էր՝ քողարկված որպես թեստերի հավաքածու։ Ներսում URL-ը հավաքվում էր առանձին մասերից՝ «https» արձանագրություն, «store» դոմեն, «rest-icon-handler» ենթադոմեն, «/icons/» ուղի և «77» թոքեն։
225-րդ տողում, մեկնաբանված թեստերի միջև, թաքնված էր կոդ, որը կատարում էր սերվերից ստացված ցանկացած պատասխան։ Ֆայլը չէր սպասում թեստերի գործարկմանը. app/index.js-ը կատարում էր require('./test'), իսկ package.json-ը app/index.js-ը միացնում էր մեկնարկին prepare սկրիպտի միջոցով։ npm-ը prepare-ը ավտոմատ կատարում է npm install-ից հետո, այսինքն՝ միայն կախվածությունների տեղադրումն էր գործարկում backdoor-ը։ «Հնացած մոդուլների» մասին հանձնարարությունը խայծ էր։
Երկու անգամ փոխառված ինքնություն
Պահոցի բոլոր 39 commit-երը գրանցված էին իրական մշակողի անունով ու էլ. փոստով՝ full-stack ինժեների, ով ունի սովորական LinkedIn պրոֆիլ, անձնական կայք և GitHub-ում երկար պատմություն։ Իմանկուլովը գրեց նրան և իմացավ, որ նա երբեք չի աշխատել այդ ընկերությունում և որևէ կապ չունի պահոցի հետ. նա նախկինում էլ էր ենթարկվել իմպերսոնացիայի GitHub-ում։
«Ռեքրութերի» պրոֆիլը նույնպես փոխառված էր՝ պատկանում էր հայտնի մշակութային լրագրողի, ում կենսագրության մեջ տեխնոլոգիական ոչինչ չկար։ Երբ Իմանկուլովն ասաց, որ նախագիծը չի տեղադրվում, «լրագրողը» ակնթարթորեն վերածվեց npm-ի ու Node-ի տարբերակների մասնագետի և պնդեց, որ նա գործարկի npm install։
Ինչ է սրանից բխում
Իմանկուլովը գրում է, որ նման հարձակումների մասին լսել էր նաև առաջ, բայց երբ դրանցից մեկը հասավ իրեն, այնուամենայնիվ անակնկալի բերեց. հոգնած կամ շտապող օրը նա հեշտությամբ կարող էր npm install գործարկել՝ չմտածելով։ Նա պահոցի մասին հայտնեց GitHub-ին, իսկ «ռեքրութերի» մասին՝ LinkedIn-ին։ Առայժմ ոչինչ չի փոխվել, և կոդը դեռ հասանելի է։
Երկրորդ եզրակացությունը տեխնիկական է. կոդը միայն ընթերցման ռեժիմում աշխատող ագենտով վերանայելն ավելի արդյունավետ եղավ, քան ձեռքով կարդալը։ Backdoor-ը քողարկված էր որպես անփույթ սկսնակի կոդ, սակայն ագենտը նկատեց այն վայրկյանների ընթացքում։ Գործնական կանոնը պարզ է՝ անծանոթ պահոցները բացեք մեկուսացված միջավայրում և ոչինչ չտեղադրեք, քանի դեռ կոդը կարդացած չեք։
SiTech — AI-ով հզորացված վեբ մշակում
Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։