Come evitare le vulnerabilità XML in Python?

0

Sto scrivendo una suite di applicazioni Python 3 (incluso prima un programma di utilità della riga di comando, seconda un HTTP(S ) che si occupano di XML.

Oggi ho scoperto che ci sono diverse vulnerabilità correlate a XML .

La mia domanda principale: vale la pena di passare interamente a defusedxml ? Non penso sia necessario per attacchi non DoS (come l'accesso ai file locali attraverso le entità SYSTEM). Quindi defusedxml è necessario solo contro gli attacchi DoS, giusto?

Se fosse solo per l'utilità della riga di comando, per attacchi come miliardi di risate, sarebbe abilitato a eseguire il mio programma in ulimit .

Ma nonostante sia ora focalizzato sull'utilità della riga di comando, voglio che il mio lavoro corrente venga utilizzato nel proxy multi-utente HTTP(S) , che scriverò anch'io.

È vero che per creare il proxy, devo usare defusedxml per proteggere da miliardi di risate e attacchi simili? Allora (dopo aver usato defusedxml ) sarà sufficiente limitare la dimensione dei file XML scaricati? O ho bisogno di alcune (e?) Contromisure più avanzate? O qualche altro tipo di contromisure?

    
posta porton 17.06.2018 - 18:09
fonte

1 risposta

3

Is it worth to entirely switch to defusedxml?

Che ne valga la pena, non dipende solo dalla minaccia che viene mitigata, ma anche da quanto lavoro extra è necessario per usare defusedxml invece di qualsiasi altra libreria. Mentre posso darti dei consigli sulla sicurezza, solo tu puoi rispondere a questa domanda.

Considero XXE (elaborazione XML External Entity (XXE) ) un problema più serio di miliardi di riser. XXE può esporre file sul filesystem locale definendo entità che leggono i file:

<?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE foo [  
   <!ELEMENT foo ANY >
   <!ENTITY xxe SYSTEM "file:///etc/passwd" >]><foo>&xxe;</foo>

Per molte librerie XML, è possibile disabilitare la gestione di DOCTYPE o l'espansione di entità e ciò renderebbe sicura la gestione di XML non attendibile. Il vantaggio di defusedxml è che viene fornito con le impostazioni di sicurezza per impostazione predefinita e non devi preoccuparti di questo.

Non basare la tua sicurezza sulla convalida XML o sui servizi igienico-sanitari prima di analizzarla. La creazione di un filtro regex che riconosca le entità XML che non possono essere aggirate dall'attaccante è quasi impossibile.

I need to use defusedxml to protect against billion laughs and similar attacks?

La maggior parte delle librerie può essere configurata per proteggere dagli attacchi XML. Non hai bisogno di per usare defusedxml.

Then will (after I use defusedxml) it be enough to limit the size of downloaded XML files?

L'utilizzo di defusedxml o la disabilitazione di DOCTYPE e le funzionalità di espansione delle entità renderanno il comportamento XML più simile a quanto ci si aspetterebbe. Limitare le dimensioni è una buona idea, ma non strettamente necessaria. Il potere di miliardi di risate è che occupa un sacco di risorse del server con un po 'di risorse del cliente. Un normale XML richiederà circa la stessa quantità di risorse del server delle risorse client.

Or do I need some (which?) more advanced counter-measures? Or some other kind of countermeasures?

Non per vulnerabilità correlate XML, no.

    
risposta data 17.06.2018 - 19:38
fonte

Leggi altre domande sui tag