🛡️ Executive Summary
- Tre gemme RubyGems malevole scaricano SleeperGem da un server Forgejo e colpiscono deliberatamente le workstation degli sviluppatori.
- Il malware evita gli ambienti CI, installa daemon persistenti e sfrutta sudo senza password per ottenere privilegi root.
- Gli sviluppatori devono rimuovere i pacchetti coinvolti, controllare cron e systemd e verificare la presenza di shell setuid anomale.
Tre pacchetti pubblicati su RubyGems hanno distribuito SleeperGem, un malware progettato per compromettere le workstation degli sviluppatori evitando deliberatamente i runner CI. Le gemme agiscono come loader, scaricano script e binari da un server Forgejo controllato dagli attaccanti e installano una backdoor persistente sui sistemi raggiunti. La catena può arrivare fino ai privilegi root quando trova configurazioni sudo prive di password, lasciando una shell setuid nascosta con il nome di una comune utility di rete. L’operazione sfrutta pacchetti impersonati, account rimasti dormienti e aggiornamenti apparentemente legittimi per infiltrarsi nella supply chain Ruby.
Cosa leggere
Tre gemme malevole distribuiscono SleeperGem attraverso RubyGems
La campagna coinvolge git_credential_manager, Dendreo e fastlane-plugin-run_tests_firebase_testlab. Il primo pacchetto, pubblicato nelle versioni 2.8.0, 2.8.1, 2.8.2 e 2.8.3, imita il nome del legittimo Microsoft Git Credential Manager, sfruttando la familiarità degli sviluppatori con uno strumento utilizzato per gestire le credenziali Git. Dendreo è stato compromesso nelle versioni 1.1.3 e 1.1.4, mentre fastlane-plugin-run_tests_firebase_testlab risulta malevolo nella release 0.3.2. Ogni gemma scarica uno script deploy.sh e un binario nativo da un’istanza Forgejo sotto il controllo degli aggressori. Il pacchetto git_credential_manager è stato inoltre aggiunto come dipendenza ad altre cinque gemme, ampliando il numero dei progetti potenzialmente esposti. La tecnica riprende lo schema osservato quando GemStuffer ha abusato di RubyGems attraverso 155 pacchetti malevoli, trasformando il registro in un canale per distribuire codice attraverso normali operazioni di installazione e aggiornamento.
Il malware evita GitHub Actions e gli altri ambienti CI

SleeperGem controlla circa trenta variabili d’ambiente associate a GitHub Actions, GitLab CI, CircleCI, Travis, Jenkins, Vercel e altri servizi di automazione. Quando identifica un runner CI, interrompe l’esecuzione senza scaricare i payload. La scelta consente di evitare ambienti temporanei, sandbox di analisi e pipeline sottoposte a maggiore monitoraggio, concentrando l’attacco sui computer personali o aziendali utilizzati dagli sviluppatori. Queste macchine offrono accesso più duraturo a repository privati, chiavi SSH, token cloud e credenziali di pubblicazione.

Su Windows, il codice inserito in git_credential_manager viene attivato quando la libreria viene richiesta e avvia il download tramite PowerShell. La versione 2.8.2 prepara soprattutto i componenti, mentre la 2.8.3 abilita il daemon e la persistenza. L’evasione selettiva mostra che il malware non cerca il maggior numero possibile di esecuzioni, ma sistemi con valore operativo elevato. Anche i pacchetti Ruby e Go utilizzati per sottrarre chiavi SSH avevano già evidenziato come gli sviluppatori rappresentino bersagli privilegiati per raggiungere successivamente codice, infrastrutture e ambienti di produzione.
Cron e systemd mantengono il daemon attivo dopo il riavvio
Dopo l’esecuzione, il malware deposita il daemon nativo nella directory ~/.local/share/gcm/, scegliendo un percorso coerente con il nome del falso Git Credential Manager. La persistenza viene configurata attraverso attività cron e servizi systemd a livello utente, permettendo alla backdoor di riavviarsi dopo il login o il reboot del sistema. Il componente scaricato dal server Forgejo mantiene il collegamento con l’infrastruttura degli attaccanti e consente di ricevere nuovi comandi o payload senza richiedere ulteriori aggiornamenti della gemma. La separazione tra loader pubblicato su RubyGems e backdoor ospitata esternamente riduce la quantità di codice sospetto presente nel pacchetto iniziale e permette agli operatori di modificare rapidamente il malware distribuito. Uno schema simile era emerso nell’attacco RubyGems basato su falsi proxy e comunicazioni Telegram, dove una libreria apparentemente utile diventava il punto di ingresso per componenti controllati a distanza.
Sudo senza password permette l’escalation fino a root
SleeperGem verifica se l’utente appartiene ai gruppi sudo o wheel e prova a stabilire se può eseguire comandi privilegiati senza inserire una password. Quando trova una configurazione permissiva, il malware si rilancia come root e crea una copia setuid della shell di sistema in un percorso che imita un’utilità legittima, come /usr/local/sbin/ping6. Il bit setuid consente a qualsiasi processo autorizzato a eseguire quel file di ottenere i privilegi del proprietario, in questo caso root.

Gli attaccanti mantengono così un accesso elevato anche se il daemon originario viene terminato o alcune credenziali vengono revocate. La scelta di mascherare la shell con il nome di un comando di rete riduce la probabilità che venga notata durante un controllo superficiale del filesystem. Una volta ottenuti i privilegi massimi, la backdoor può leggere repository, modificare strumenti di sviluppo, sottrarre segreti o installare ulteriori componenti. Il comportamento conferma che SleeperGem non è un semplice downloader, ma una piattaforma di accesso persistente destinata a trasformare il computer dello sviluppatore in un punto di ingresso verso risorse più sensibili.
Account dormienti e nomi credibili rafforzano l’attacco supply chain
L’analisi ha evidenziato l’uso di account RubyGems rimasti inattivi per anni e successivamente riattivati per pubblicare versioni malevole. Questa strategia sfrutta la reputazione accumulata da pacchetti già conosciuti e riduce i sospetti rispetto alla comparsa di un profilo completamente nuovo. Nel caso di git_credential_manager, l’impersonificazione di un prodotto Microsoft aggiunge una seconda forma di inganno basata sul nome. Si tratta di un meccanismo vicino al typosquatting utilizzato per confondere sviluppatori e installare dipendenze fraudolente, anche se il pacchetto non deve necessariamente contenere un errore ortografico: può limitarsi a occupare un nome non ufficiale ma plausibile. L’assenza di commit o tag corrispondenti nei repository originali costituisce un segnale importante, perché indica una divergenza tra il codice pubblicato nel registro e quello disponibile per la revisione. La recente compromissione di AsyncAPI attraverso pacchetti npm scaricati milioni di volte conferma che la fiducia nel maintainer o nella cronologia del progetto non può sostituire la verifica della singola release.
Come individuare e rimuovere SleeperGem
Gli sviluppatori devono controllare immediatamente i file Gemfile e Gemfile.lock alla ricerca delle versioni coinvolte, rimuovere le gemme malevole e rigenerare le dipendenze da fonti verificate. Sui sistemi Linux e macOS è necessario esaminare ~/.local/share/gcm/, le attività cron dell’utente, i servizi systemd personali e la presenza di file setuid inattesi in /usr/local/sbin/, con particolare attenzione a elementi denominati ping6. Devono essere analizzati anche processi in background, connessioni verso host Forgejo sconosciuti e script deploy.sh scaricati recentemente. Se il sistema mostra indicatori di compromissione, la sola eliminazione della gemma non è sufficiente: occorre ruotare chiavi SSH, token GitHub, credenziali RubyGems, segreti cloud e password accessibili dalla macchina. Le organizzazioni devono inoltre bloccare sudo senza password dove non strettamente necessario, sottoporre gli aggiornamenti delle dipendenze a revisione e confrontare ogni release con commit e tag del repository originale. SleeperGem dimostra che una workstation di sviluppo può diventare più preziosa di un runner CI, perché conserva accessi stabili all’intera catena di produzione del software.
Iscriviti alla Newsletter
Non perdere le analisi settimanali: Entra nella Matrice Digitale.
Matrice Digitale partecipa al Programma Affiliazione Amazon EU. In qualità di Affiliato Amazon, ricevo un guadagno dagli acquisti idonei. Questo non influenza i prezzi per te.









