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?

3 Mi Piace

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

2 Mi Piace

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

9 Mi Piace

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%).

5 Mi Piace

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.

16 Mi Piace

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.

7 Mi Piace

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

3 Mi Piace

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
---
31 Mi Piace

Grazie David!

13 Mi Piace

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

20 Mi Piace

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!

12 Mi Piace

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

12 Mi Piace

Benvenuti nella community e grazie per aver sistemato tutto.

9 Mi Piace

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.

4 Mi Piace

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.

1 Mi Piace

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

5 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.