
Démontre une XXE via l'upload de SVG avec un parseur Flask/lxml vulnérable et un script d'exploit pour la lecture arbitraire de fichiers, la SSRF et les tests de déni de service.
# xxe_upload_server.py - Uploads SVG, renders with lxml resolving entities
from flask import Flask, request
from lxml import etree
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload_svg():
svg_data = request.data
# Vulnerable: parses with entity resolution enabled
parser = etree.XMLParser(resolve_entities=True, no_network=False)
doc = etree.fromstring(svg_data, parser)
# Extract something from SVG
return etree.tostring(doc)
if __name__ == '__main__':
app.run(port=5000)
Une application web accepte l'upload d'images SVG et les analyse avec un parseur XML vulnérable dont la résolution d'entités externes est activée. Un attaquant peut insérer une charge utile XXE pour lire des fichiers locaux, effectuer des SSRF ou provoquer un déni de service.
resolve_entities=True et un accès réseau, ce qui permet l'expansion d'entités externes.pip install flask lxml
python xxe_upload_server.py
python exploit_xxe_svg.py