
LinkedIn-ის სამუშაო შეთავაზებაში ჩამალული ბექდორი: როგორ იმუშავა ხაფანგმა
სრულსტეკ დეველოპერმა რომან იმანკულოვმა LinkedIn-იდან მიღებული სამუშაო შეთავაზების შემდეგ GitHub-ის რეპოზიტორიაში ფარული ბექდორი აღმოაჩინა: კოდი npm install-ისას ავტომატურად სრულდებოდა და სერვერიდან მიღებულ ბრძანებებს ასრულებდა.
2026 წლის ივნისის დასაწყისში სრულსტეკ დეველოპერმა რომან იმანკულოვმა LinkedIn-ზე მცირე კრიპტო სტარტაპის „რეკრუტერისგან“ შეტყობინება მიიღო. რამდენიმე დღის მიმოწერის შემდეგ მან მიიღო საჯარო GitHub-ის რეპოზიტორი, რომელიც უნდა გადაეხედა — კერძოდ, ე.წ. „მოძველებული Node მოდულების პრობლემა“. ჩვეულებრივი მოთხოვნაა, მაგრამ დეველოპერს რაღაც ეჭვი შეეპარა.
კოდი საკუთარ მანქანაზე არ გაუშვია: Hetzner-ზე დროებითი VPS ააგო, რეპოზიტორი იქ დააკლონა და AI-აგენტი Pi მხოლოდ კითხვის რეჟიმში გაუშვა — ჩართული იყო მხოლოდ ფაილების წაკითხვის ხელსაწყოები (read, grep, find, ls).
ხაფანგი სატესტო ფაილში
აგენტმა ძებნა თითქმის მაშინვე შეწყვიტა ფაილზე app/test/index.js. რეპოზიტორია React-ის ფრონტენდისა და Node-ის ბექენდის შთაბეჭდილებას ტოვებდა, ხაფანგი კი დაახლოებით 250 სტრიქონი იყო, რომელიც ტესტების კრებულს ემსგავსებოდა. მის შიგნით URL ცალკეული ნაწილებისგან იკრიბებოდა — პროტოკოლი „https“, დომენი „store“, ქვედომენი „rest-icon-handler“, ბილიკი „/icons/“ და ტოკენი „77“.
225-ე სტრიქონზე, კომენტარებად ქცეულ ტესტებს შორის, ჩამალული იყო კოდი, რომელიც ამ სერვერიდან მიღებულ ნებისმიერ პასუხს ასრულებდა. ფაილი ტესტების გაშვებას არ ელოდა: app/index.js ასრულებდა require('./test')-ს, package.json კი მას prepare სკრიპტით გაშვებასთან აკავშირებდა. npm prepare-ს npm install-ის შემდეგ ავტომატურად ასრულებს — ანუ უბრალოდ დამოკიდებულებების დაყენება იწვევდა ბექდორის გაშვებას.
ორჯერ ნასესხები ვინაობა
რეპოზიტორიის 39 კომიტი ნამდვილი დეველოპერის სახელითა და ელფოსტით იყო გაფორმებული — ადამიანის, რომელსაც ჩვეულებრივი LinkedIn პროფილი, პირადი ვებსაიტი და გრძელი ისტორიის მქონე GitHub ანგარიში აქვს. იმანკულოვმა მას მიწერა და გაიგო, რომ ამ კომპანიაში არასდროს უმუშავია და რეპოზიტორიასთან არაფერი აქვს საერთო — ის ადრეც გახდა GitHub-ზე იმპერსონაციის მსხვერპლი.
„რეკრუტერის“ პროფილიც ნასესხები იყო — ის ცნობილ ხელოვნების ჟურნალისტს ეკუთვნოდა, რომლის ბიოგრაფიაშიც ტექნოლოგიებთან კავშირი არ ჩანდა. როცა იმანკულოვმა უთხრა, რომ პროექტი ვერ დაყენდა, „ჟურნალისტი“ მყისვე npm-ისა და Node-ის ვერსიების ექსპერტად გადაიქცა და დაჟინებით სთხოვდა npm install-ის გაშვებას.
რას ნიშნავს ეს პრაქტიკაში
იმანკულოვი აღიარებს, რომ ასეთ თავდასხმებზე ადრეც სმენია, მაგრამ როცა თავად შეეხო, მაინც მოულოდნელი აღმოჩნდა; დაღლილ ან ნაჩქარევ დღეს npm install-ის გაშვება სავსებით შესაძლებელი იყო. მან რეპოზიტორია GitHub-ს და „რეკრუტერი“ LinkedIn-ს აცნობა, თუმცა ჯერჯერობით არაფერი შეცვლილა და კოდი კვლავ ხელმისაწვდომია.
მეორე დასკვნა ტექნიკურია: კოდის განხილვა წაკითხვის რეჟიმში მომუშავე აგენტს უფრო პროდუქტიული აღმოჩნდა, ვიდრე ხელით კითხვა. ბექდორი უყურადღებო დამწყების კოდის იერს ატარებდა, მაგრამ აგენტმა ის წამებში შენიშნა. პრაქტიკული წესი მარტივია: უცხო რეპოზიტორია იზოლირებულ გარემოში გახსენით და არაფერი დააყენოთ, სანამ კოდს არ წაიკითხავთ.
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.