
LinkedIn'deki iş teklifine gizlenen arka kapı: sahte işe alım uzmanı nasıl tuzak kurdu
Bir iş ilanı için GitHub deposunu incelemesi istenen geliştirici, npm install sırasında çalışan gizli bir arka kapı buldu. Depodaki commit'ler ve "işe alım uzmanının" profili, projede hiç çalışmamış iki gerçek kişiye aitti.
Haziran 2026'nın başında, full-stack geliştirici Roman Imankulov, küçük bir kripto girişiminin "işe alım uzmanından" LinkedIn üzerinden bir mesaj aldı. Birkaç gün süren yazışmanın ardından kadın, başına bir baş mühendis aradıkları bozuk bir prototipten söz etti ve incelemesi için herkese açık bir GitHub deposu gönderdi; özellikle "kullanımdan kaldırılmış Node modülleri sorununa bakmasını" istedi. Mevcut bir kod tabanını incelemek olağandışı değil, ama bir şeyler ters geldi ve geliştirici ekstra temkinli davranmaya karar verdi.
Depoyu kendi makinesinde klonlayıp bağımlılıkları kurmak yerine Hetzner'de geçici bir VPS açtı, depoyu oraya klonladı ve Pi adlı yapay zekâ aracısını yalnızca okuma modunda, sadece dosya okuma araçları etkin şekilde çalıştırdı: read, grep, find, ls.
Test dosyasının içindeki tuzak
Aracı neredeyse hemen app/test/index.js dosyasında durdu. Depo, Node arka ucuna sahip bir React ön yüzü gibi görünüyordu; tuzak ise test paketi kılığına sokulmuş yaklaşık 250 satırdı. İçeride bir URL parçalardan oluşturuluyordu: protokol "https", alan adı "store", alt alan adı "rest-icon-handler", yol "/icons/" ve token "77".
225. satırda, yorum satırına çevrilmiş testlerin arasında, sunucunun geri gönderdiği her şeyi makinede çalıştıran bir yük gizliydi. Dosya testlerin çalışmasını beklemiyordu: app/index.js, require('./test') çağrısını yürütüyor ve package.json, app/index.js'i prepare betiği üzerinden başlangıca bağlıyordu. npm, prepare betiğini npm install'dan sonra otomatik çalıştırır; yani yalnızca bağımlılıkları kurmak arka kapıyı tetikliyordu. "Kullanımdan kaldırılmış modüller" uyarısı bir yemdi.
İki kez ödünç alınmış kimlik
Depodaki 39 commit'in tamamı gerçek bir geliştiricinin adı ve e-postasıyla atılmıştı: sıradan bir LinkedIn profili, kişisel bir web sitesi ve uzun bir GitHub geçmişi olan bir full-stack mühendisi. Imankulov ona yazdı ve bu kişinin şirkette hiç çalışmadığını, depoyla ilgisi olmadığını öğrendi; daha önce GitHub'da taklit edilmiş ve bu yüzden bir deposu kaldırılmıştı.
"İşe alım uzmanının" profili de ödünçtü: uzun bir kültür geçmişi olan, teknik yönü bulunmayan tanınmış bir sanat gazetecisine aitti. Imankulov projeyi kuramadığını söyleyince "gazeteci" bir anda npm ve Node sürümleri uzmanına dönüşüp onu npm install çalıştırmaya zorladı.
Bundan çıkan dersler
Imankulov, bu tür saldırıları daha önce duyduğunu, ama kendisine geldiğinde yine de hazırlıksız yakalandığını yazıyor; yorgun ya da aceleci bir günde npm install çalıştırması işten bile değildi. Depoyu GitHub'a, "işe alım uzmanını" LinkedIn'e bildirdi. Şu ana kadar hiçbir şey değişmedi ve kod hâlâ erişilebilir durumda.
İkinci ve daha teknik ders ise şu: kodu yalnızca okuma modundaki bir aracıyla incelemek, elle okumaktan daha verimli oldu. Arka kapı özensiz bir acemi koduna benzeyecek şekilde gizlenmişti, ama aracı onu saniyeler içinde işaretledi. Pratik kural basit: bilinmeyen depoları yalıtılmış bir ortamda açın ve kod okunmadan hiçbir şey kurmayın.
SiTech — AI destekli web geliştirme
Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.