Perché preoccuparsi di convalidare il nome host per una risposta a Google Recaptcha?

7

Il Recaptcha di Google ha la convalida hostname "baked-in". Quando un utente invia una risposta Recpatcha, il dominio da cui è stata acquisita la risposta viene convalidato rispetto alla whitelist dei domini che hai fornito quando hai configurato il Recaptcha.

Tuttavia, se utilizzi Recaptcha con più domini hai la possibilità di disattivare la convalida di hostname di Google e gestirla autonomamente ( link ).

Google lo accompagna con un avvertimento importante che non convalida il hostname per ogni risposta data ti apre a una vulnerabilità di sicurezza. Ma considerando quanto sia facile spoofare hostname , non vedo come questo mai abbia fornito alcun livello di miglioramento della sicurezza.

Un semplice test mi ha dimostrato quanto sia facile falsificare il valore di hostname che Google utilizza per convalidare l'origine della risposta Recaptcha:

$ sudo nano /etc/hosts
127.0.0.1    spoofedhostname.com

E poi quando ho inviato una risposta Recaptcha test il risultato che ho ottenuto è stato il seguente:

{
    "success": true,
    "challenge_ts": "2016-12-24T14:15:22Z",
    "hostname": "spoofedhostname.com"
}

Allora, perché preoccuparsi con la convalida del nome host?

  1. La convalida del nome host è ampiamente nota per essere inutile considerando quanto sia facile spoofare.
  2. Questo sembra avere a che fare con la prevenzione che un utente malintenzionato rubi la tua chiave pubblica Recaptcha e poi genera un gruppo di risposte Recaptcha valide, che potrebbero memorizzare e quindi utilizzare quando automatizza un attacco su endpoint sensibili ( /login ,% codice%). Teoricamente, questo potrebbe essere usato in qualche tipo di attacco di forza bruta, ma non ha senso considerando che i token di risposta scadono dopo 1 minuto. E avresti ancora bisogno di risolvere manualmente tutti i Recaptchas, che potresti semplicemente fare nel dominio attuale. E, ancora una volta, potrebbero facilmente rovinare il tuo dominio anche se stai facendo la convalida di /reset-password .

Non ha alcun senso per me, ma considerando che si tratta di un prodotto Google, devo pensare che i loro ingegneri della sicurezza sappiano qualcosa che non conosco.

Cosa mi manca?

    
posta AJB 24.01.2017 - 21:12
fonte

3 risposte

6

Potrebbe avere qualcosa a che fare con le persone che incorporano i tuoi captcha su un sito che hanno configurato e utilizzano i captcha risolti per inviare spam al tuo sito.

Ad esempio, creare un sito e dare qualcosa gratuitamente (film pirata / software, porno, ecc.) ma chiedere il captcha. Internamente questo è in realtà il tuo captcha, e qualsiasi captcha risolto viene passato a uno spambot che prende di mira il tuo sito. Ciò consente a un utente malintenzionato di accedere in modo economicamente efficiente alla risoluzione captcha umana rispetto alle tradizionali farm captcha.

La convalida del nome host impedirebbe il caricamento del JS del captcha su un sito non autorizzato.

Aggiornamento: recentemente ho implementato una demo di bypassare questo facendo il captcha sul sito originale in un browser headless e poi usando magic Websocket per farlo streaming sul mio sito "esca" (in questo caso un semplice URL shortener che chiede il captcha prima di reindirizzare al sito di destinazione). Ciò richiedeva una notevole quantità di RAM (ogni istanza di Firefox era di circa 500 MB) rispetto all'equivalente di rendere il captcha direttamente sul sito dell'esca, quindi questa funzione di verifica dell'hostname è sicuramente un grosso problema per gli spammer.

    
risposta data 14.02.2017 - 04:55
fonte
2

Ci sono due chiavi. La chiave del sito e la chiave segreta. Entrambi questi sono dati all'amministratore web quando si imposta reCAPTCHA.

Per l'integrazione lato client, ti daranno api.js e snippet e la chiave del sito da inserire sul sito web.

"Quando i tuoi utenti inviano il modulo in cui hai integrato reCAPTCHA, riceverai come parte del payload una stringa con il nome" g-recaptcha-response ". Per verificare se Google ha verificato quell'utente, invia un Ottieni una richiesta con questi parametri: "< - quindi se sto spoofing l'url, il tuo server non riceve mai la risposta g-recaptcha. Il segreto non viene mai inviato, il valore della 'g-recaptcha-response' non viene mai inviato e l'ip remoto non viene mai inviato.

Mi manca il modo in cui l'hacker sta ottenendo la chiave segreta dal server web. Questo sarebbe sempre e solo inviato direttamente a google.

------ Spiegazione extra di quello che sto vedendo.

La chiave del sito è facilmente visibile nel codice html del tuo sito. Tuttavia, la chiave segreta memorizzata sul tuo server non può essere letta o falsificata. Non so come l'hacker avrebbe ottenuto l'accesso alla chiave segreta per completare l'autenticazione a due vie con google.

Penso che questo sia ciò che ti manca. (l'autenticazione a due vie)

Refrences: link (video sull'impostazione di google reCAPTCHA.

link

Inoltre: google reCAPTCHA sfrutta, ci sono alcune insicurezze molto interessanti che implicano l'incorporamento di reCAPTCHA di qualcun altro in un sito Web per l'autenticazione automatica quando fanno clic in qualsiasi punto della pagina.

(la reputazione è troppo bassa per pubblicare più di 2 link)

    
risposta data 09.02.2017 - 22:25
fonte
-1

La convalida del nome host viene utilizzata come misura anti-bot. Se stai utilizzando il tuo CAPTCHA harvester su localhost tramite l'URL su cui il CAPTCHA deve essere raccolto, non puoi più inviare direttamente richieste al sito dal tuo computer in quanto verranno reindirizzate a localhost. Tuttavia ci sono cose che puoi fare per aggirare questo.

    
risposta data 24.08.2018 - 12:48
fonte

Leggi altre domande sui tag