Sei stato hackerato da un plugin

Ho appena ricostruito uno dei miei forum Discourse e quando lo carico nel browser, il seguente messaggio appare in un popup:

Sei stato hackerato da un plugin! di w3shi(Hackerone)-S.Lakshmi Vignesh(RCE-POC)

Santo cielo… Cosa sta succedendo? Uno dei plugin che uso è stato compromesso?

C’è la possibilità che tu abbia usato il plugin migrate password? O un altro plugin dal repository discoursehosting?

Sembra che anche questo forum sia stato colpito Am I hacked? or not - Forum Management - Suggestions - DxO Forum

Sì, è nell’elenco. Ed è l’unico di discoursehosting.

Ricordo che deve essere attivo per consentire agli utenti “vecchi” di accedere, corretto?

Ma ora la domanda è più se l’installazione è stata compromessa o se sta solo mostrando questo messaggio. Il sito è al momento inattivo per sicurezza.

Insieme a quel plugin, ecco l’elenco di quelli che sto usando:

rimuovi tutto ciò che fa riferimento a discoursehosting

Traduzione in Google Translate del post del forum francese:

Un ricercatore di pseudo-sicurezza ha recuperato un vecchio repository Git per un plugin utilizzato dal forum e lo ha dirottato per visualizzare semplicemente questo messaggio.

Il repository in questione (GitHub - discoursehosting/discourse-migratepassword: A touch of security) è stato ispezionato e non è presente codice dannoso (è semplicemente una prova di concetto).

Questo repository aveva effettivamente cambiato il suo URL (ora è disponibile su GitHub - communiteq/discourse-migratepassword: Support migrated password hashes) e l’utente ha semplicemente ricreato il repository discoursehosting/discourse-migratepassword, che in precedenza reindirizzava a communiteq/discourse-migratepassword, per inserire lì codice non correlato. Stavamo utilizzando il vecchio URL, motivo per cui siamo stati interessati.

Se è vero, okay… Ho cambiato l’URL del plugin in communiteq e al momento sto ricostruendo. Ma devo approfondire (dato che non sono un programmatore, non posso essere sicuro al 100%).

TL;DR

Questa è una vulnerabilità di Github in una classe di exploit chiamata “Repojacking”.

Consigliamo a tutti di controllare gli URL dei propri plugin Github e di rinominare ogni singola istanza di discoursehosting in communiteq

Background:

Abbiamo dovuto rinominare la nostra azienda da Discoursehosting a Communiteq nel 2019.
Se ciò accade, Github reindirizza automaticamente gli URL ai repository di Github nella loro nuova posizione, finché qualcuno non crea un repository con lo stesso nome. A quel punto il nuovo repository avrà la precedenza.

Github contrassegnava tali repository come “ritirati” e proibiva la creazione di un repository con lo stesso nome.

Un precedente exploit è descritto qui. Apparentemente quella correzione non è più efficace.

Abbiamo presentato una segnalazione di abuso a Github e cercheremo di rimuovere questo repository con tutti i mezzi disponibili.

Al momento il plugin compromesso mostra solo un messaggio e lascia un file innocuo in /tmp.
Quindi non è successo nulla di grave - per ora. È importante cambiare l’URL del tuo plugin prima di ricostruire.

wow it can catch the end user out easily, one of the main disadvantages of not using discourse.org official hosting.

If either
angusmcleod (Angus McLeod) · GitHub or merefield (Robert) · GitHub
accounts ceased to exist
then a first sub-path would be exposed, so there would be a clone command sitting in my app.yml for a rebuild to execute

Per mitigare il potenziale impatto per gli utenti dell’installazione standard, abbiamo aggiunto del codice per rilevare github.com/discoursehosting/ e interrompere qualsiasi ricostruzione/aggiornamento.

L’errore apparirà simile a

---
ERRORE: Il file di configurazione containers/app.yml contiene riferimenti a un'organizzazione GitHub compromessa: github.com/discoursehosting
Si prega di rimuovere qualsiasi riferimento a questa organizzazione dal file di configurazione.
Per maggiori informazioni, vedere https://meta.discourse.org/t/374703/6
---

Grazie David!

Ciao community di Discourse,

Voglio scusarmi sinceramente per l’interruzione causata dalle mie azioni riguardo al repository dei plugin. Nel tentativo di evidenziare un problema di sicurezza, ho commesso gravi errori che hanno violato il codice di condotta.

Andando avanti, mi assicurerò che le mie azioni aderiscano alle pratiche di divulgazione responsabile e apprezzo l’opportunità di imparare da questo.

Ancora una volta, mi dispiace sinceramente per l’interruzione causata.

@w3shi

Grazie per le tue scuse.

La cosa successiva, non così responsabile, è stata non contattarmi o CDCK privatamente quando hai ceduto l’handle, perché nelle ultime tre ore qualcun altro avrebbe potuto vedere il tuo post e registrarlo.

Ora ho ripreso il controllo del vecchio handle di Github. E grazie per aver fatto la cosa giusta alla fine, e per aver sottolineato che Github non protegge più i reindirizzamenti per la quinta volta (l’ultima volta è stata la quarta volta: “Questa scoperta segna la quarta volta che è stato identificato un metodo alternativo per eseguire il Repojacking”)

Ti suggerisco di rivolgerti a Github e riscuotere la tua taglia!

Mi scuso profondamente per tutti i disagi causati! E grazie per la tua comprensione @RGJ!

Benvenuti nella community e grazie per aver sistemato tutto.

In sostanza, dovresti presumere che nulla sia sicuro, il che non funziona bene.

Solo pochi giorni fa è emerso che uno degli sviluppatori dietro alcuni account NPM di pacchetti ESLint Prettier è stato compromesso e ha pubblicato nuove versioni compromesse di alcuni pacchetti popolari:

Questi pacchetti sono stati quindi referenziati in altri pacchetti, poiché molti sostengono che si dovrebbe sempre aggiornare alle ultime versioni.

Dopo aver visto questa discussione, ho suggerito una funzionalità per introdurre la convalida della firma di plugin/componenti tematici durante l’aggiornamento: Plugin and theme component signing

Ciò non fermerebbe una chiave compromessa, ma almeno renderebbe una parte della catena di approvvigionamento più affidabile. Alla fine, è ancora possibile che vengano richiamate librerie di terze parti compromesse. Le dipendenze aggiuntive non sono realmente visibili.

Non sono sicuro che funzioni ancora. Avevo un plugin che puntava all’URL compromesso di GitHub e il messaggio di errore durante la ricostruzione diceva solo che non era stato possibile recuperare il repository, con ulteriori dettagli su una versione di gem o qualcosa di simile. (Non posso incollare le informazioni esatte poiché sono troppo indietro nel mio scrollback a causa di tutto il resto del rumore durante le build successive.)

Sembra che l’URL/repository non esista più, il che è un bene (almeno finché qualcun altro non lo ricrea), ma il messaggio di errore avrebbe fatto risparmiare molto tempo.

Infatti, @RGJ ha ripreso il controllo dell’organizzazione github, quindi abbiamo rimosso il messaggio di errore temporaneo.