SlideShare a Scribd company logo
HIGH-DEF FUZZING
EXPLOITATION OVER HDMI-CEC
name = "Joshua Smith"
job = "Senior Security Researcher"
job += "Zero Day Initiative"
irc = "kernelsmith"
twit = "@kernelsmith"
Previous Research
HDMI – Hacking Displays Made Interesting
Andy Davis
BlackHat EU 2012
What is HDMI?
High Def Multimedia Interface
HDMI is a specification
Implemented as Cables & Connectors
Successor to DVI
Has Quite a Few Features
What is CEC?
Consumer Electronics Control
HDMI feature
Allows user to command & control up to 15 devices
Can relay commands from remotes
It is what automatically changes your TV input
Has some other intriguing features...
Why?
Wanted to research an area that was relatively untouched
I do not have mad hardware skills
I like RISC targets & assembly
Another attack vector for mobile devices via:
Mobile High-Definition Link (MHL) ~ Samsung & HTC
Slimport ~ LG, Google Nexus, Blackberry
My son is completely obsessed with cords/wires, esp
HDMI
Specs & Features
History
1.0 (Dec 2002), 1.1 (May 2004), 1.2 (Aug 2005)
Boring stuff
1.2a (Dec 2005)
Fully specified Consumer Electronics Control
This is the good stuff, for vulnerabilities anyway
Specs & Features
History Continued
1.3 - 1.3c (Jun 2006 through Aug 2008)
Whizz-bang A/V improvements & new connectors
1.4 (May 2009)
Most widely deployed and available
Features++: 4k, HEC, ARC, 3D, micro connector
Some that might interest us (next)
2.0 (Sep 2013)
New hotness: 4K video @60fps, Dual View, 3D++, CEC++
Specs & Features
Interesting 1.4 Features
HEC (HDMI Ethernet Connection)
Sounds tasty
100Mb/s
Enables traditional networking w/HDMI
ARC (Audio Return Channel)
CEC Details
1-wire bidirectional serial bus
Slow: 500Mb/s
Uses AV.link protocol to perform remote control functions
For HDMI:
CEC wiring is mandatory
CEC functionality (software mainly) is optional
CEC's Goals
Simplify system integration
Common protocol
Extendable (vendor-specific commands)
Commands are grouped together into Feature Sets
For example, one-touch play (OTP)
TV on, text view on (optional), set active source
Notable
Implementations
Commercial industry uses various trade names
Anynet+ (Samsung), Aquos Link (Sharp), BRAVIA
Link/Sync (Sony)
SimpLink (LG), VIERA Link (Panasonic), EasyLink
(Philips), etc
Open Source
libCEC (dual commercial license)
Android HDMI-CEC
Not-HDMI CEC
Slimport
Mobile High-Definition Link (MHL)
Notes: TODO: add tidbits about Slimport and MHL, like
overloading the connector etc
CEC Addressing
PHYSICAL
N.N.N.N where 0x0<=N<=0xF
Like F.A.4.0
Obtained on hot-plug from EDID
The root display is always 0.0.0.0
If attached to 1st input on root: 1.0.0.0
Required as CEC has a notion of switching
CEC Addressing
LOGICAL
L where 0x0<=L<=0xF
Root display is always 0
By product type
Negotiated w/other devices
Example: first STB in system is always 3
Non-CEC devices only have physical addr
Logical Addresses
Address Device Address Device
0 TV 8 Playback Dev 2
1 Rec. Device 1 9 Rec Device 3
2 Rec. Device 2 10 Tuner 4
3 Tuner 1 11 Playback Dev 3
4 Playback Dev 1 12 Reserved
5 Audio System 13 Reserved
6 Tuner 2 14 Free Use
7 Tuner 3 15 Unreg/Broadcast
CEC Protocol
Blocks & Frames
Blocks
Each block is 10 bits
Max of 16 blocks (14 purely data blocks)
Frames
(1bit) Start bit
(10bits) Header block
(10bits) Opcode block
(10bits) Optional data block(s)
Header Block
Source Dest EoM Ack
3 2 1 0 3 2 1 0 E A
(4bits) Logical address of source
(4bits) Logical address of dest
(2bits) Control bits (EoM & Ack)
Example: 0100:0000:0:0 = Src 4, Dest 0
Data Block
Data EoM Ack
7 6 5 4 3 2 1 0 E A
(8bits) Data (Big-endian/MSB first)
(2bits) Control bits (EoM & Ack)
Example: 01000001:1:0 = "A"
CEC Protocol
Pinging and Polling
The "Ping"
EOM bit in header is set to 1
Used to poll for devices etc (fuzz monitor?)
Source & dest addresses will be different
Also used for allocating Logical Addresses
Source & dest addresses are the same
CEC Protocol
Additional Info
All numbers > 1 byte are transmitted as big-endian
All bit sequences are sent MSB first
Messages can be directly addressed, broadcast, or both
Should ignore a message coming from address 15, unless:
Message invokes a broadcast response
Message has been sent by a CEC Switch
The message is Standby
CEC Protocol
The Long and Short of It...
10:64:44:65:66:43:6F:6E:20:32:33
1F:82:10.00
SD:OP:41:42:43:44:45:46
CEC Protocol
Example Messages
Name ID Feature Set Addr Parameters
Poll Sys Info Direct
Get CEC Ver 9F Sys Info Direct
CEC Version 9E Sys Info Direct CEC Version
Set OSD Name 47 OSD Xfer Direct OSD Name
Set OSD Str 64 OSD Disp Direct DispCtrl,Str
Active Source 82 OTP, RC Bcast Phys Addr
CEC Protocol
Transmission (Flow) Control
3 mechanisms to provide reliable frame transfer
1. Frame re-transmissions (1 to 5)
2. Flow control
3. Frame validation (ignore msgs w/wrong #args)
A message is assumed correctly received when:
It has been transmitted and acknowledged
A message is assumed to have been acted upon when:
Sender does not receive Feature Abort w/in 1sec
Common Sequences
Addressing
1. Discovery (poll etc) of new physical address
2. Allocation (of logical address)
3. Report by broadcasting ReportPhysicalAddress
Become active source
1. Broadcast an ActiveSource to declare intention
2. Presently active source shall act appropriately
Feature Sets
One-Touch Play (OTP)
ImageViewOn* 40:04 (assumes playback dev 1)
TextViewOn 4F:0D (optional, remove displayed menus)
ActiveSource 4F:82 (assumes playback dev 1)
Attack Vectors
HDMI Ethernet Channel (HEC)
Network connectivity to things thought un-networked
Great place to hide
Targetable devices
TVs, BluRays, receivers, "TV Sticks", game consoles?
Mobile phones & tablets
Devices implementing MHL/Slimport
Known popular mobile devices that implement MHL
Attack Surface
CEC commands
HEC commands
CDC commands
Finding Vulns
Approaches
Identify "at-risk" messages & fuzz
Source Code Analysis
Hard to come by except libCEC & Android
Reverse Engineering
Can be hard to get all the firmwarez
Expect different architectures
MIPS, ARM, ARC etc
MIPS is generally most popular so far
Interesting Messages
String operations
Set OSD Name (0x47)
Preferred name for use in any OSD (menus)
Set OSD String (0x64)
Text string to the TV for display
Set Timer Program Title (0x67)
Set the name of a program associated w/a timer
Vendor-specific Messages
Because who knows what they might do
In Order to Fuzz
We Need to Answer Some Questions
How can we send arbitrary CEC messages?
How can we detect if a crash occurred?
Sending Messages
Hardware
~0 {lap,desk}tops with HDMI-CEC
Many have HDMI, none have CEC
Adapters
Pulse-Eight USB-HDMI
RainShadow HDMI-CEC to USB Bridge
Raspberry Pi
RPi & P8 adapter both use libCEC :)
Sending Messages
Software
Pulse-Eight driver is open source (libCEC)
Dual-licensed actually (GPLv2/Commercial)
Python SWIG-based bindings
Supports a handful of devices
Fuzzing CEC
libCEC
Can send CEC messages with:
Raspberry Pi + libCEC
P8 USB-HDMI adapter + libCEC
But can we really send arbitrary CEC messages?
lib.Transmit(CommandFromString("10:82:41:41:41:41:41:41:41:41:41"))
YES. It would appear at least.
To know for sure, had to ensure libCEC was not validating.
Demo
Fuzzing Process
It has been with Python + RainbowTech serial API
I actually did not know this until late in the research
RainbowTech device has a nice simple serial API
Not much complex functionality
I had already started down the path below
libCEC + Python since pyCecClient is already a thing
Can use the P8 USB adapter and/or Raspberry Pi(s)
May port to Ruby since SWIG & Ruby++
done
Fuzzing Process
Major Steps
ID Target and Inputs
Generate Fuzzed Data
Execute Fuzzed Data
Monitor for Exceptions
Determine Exploitability
Fuzzing: Brute Force Vulnerability Discovery (Sutton, Michael; Greene, Adam; Amini, Pedram)
Generate Fuzzed Data
Started with "long" strings and string-based messages
Format strings
Parameter abuse
Vendor-specific messages
Simple bit-flipping
Adopted some from Davis work
Execute Fuzzed
1. Poll device
2. Send message
Monitor for Exceptions
1. Check for ack if applicable
2. Poll again
3. If debug, use that
4. If shell, check if service/app still running
5. If TV, will probably notice crash, fun, hard to automate
6. If exception, record msg & state & debug details if avail
DETERMINE EXPLOITABILITY
This is kind of an adventure unless debug
Specific to each device
Fuzzing
Complications
Getting Hold of Devices
They are around you however, just need to look
Can also emulate w/QEMU + firmware
Speed
500 bits/s
Not much we can do about that
Fuzz multiple devices simultaneously
RE targets to focus the fuzz
Fuzzing
Complications Continued
Debugging
Need to get access to the device
Probably no debugger
Often painful to compile one for it
Collect Data
Deduplicate
Repro
Targets
Home Theater Devices
Samsung Blu-ray Player (MIPS)
Targeted because already have shell
(Thx Ricky Lawshae)
Local shell to get on & study device
Philips Blu-ray Player
Samsung TV
Panasonic TV
Chromecast
Amazon Fire TV Stick
Targets
Mobile devices
Kindle Fire
Galaxy S5 (S6 dropped MHL)
Galaxy Note
Chromebook
Fuzzing
Results
Vulns Discovered
Demos & Videos
Panasonic TV
Samsung Blu-ray Player
app_player
Exploitation
Background Info
Barriers
Samsung TV
Post exploitation
Enable HEC
Enable LAN
Attack LAN services if nec
Enable higher speed exfil etc
Wake-Over-CEC
Beachhead for attacking other devices
Hiding
Future Work
Explore Attack Surface of
HDMI: 3D, Audio Return Channel, more w/HEC
Feature adds to CEC
Moar devices
Emulation
Undo bad Python
Conclusion
Becoming more and more pervasive and invasive
Old vuln types are new again
Hard, sometimes impossible, to upgrade, maintain,
configure
Risk = Vulnerabilty x Exposure x Impact
The vulns are there
Exposure is growing
Impact is probably highest for your privacy
What next? How do we fix or mitigate this?
References
Simplified Wrapper & Interface Generator
Reveal.js
blackhat.com/bh-eu-12-Davis-HDMI
github.com/Pulse-Eight/libcec
hdmi.org
cec-o-matic.com/
p8-USB-HDMI-adapter
swig.org
github.com/hakimel/reveal.js

More Related Content

PDF
What the HEC? Security implications of HDMI Ethernet Channel and other relate...
PDF
IOMX in Android
PPTX
Understanding open max il
PDF
L4100
PDF
IT Essentials (Version 7.0) - ITE Chapter 5 Exam Answers
PPT
Chapt 01 Assembly Language
PDF
Bill redirect manual
PPT
PlaySIM Project Java One 2009
What the HEC? Security implications of HDMI Ethernet Channel and other relate...
IOMX in Android
Understanding open max il
L4100
IT Essentials (Version 7.0) - ITE Chapter 5 Exam Answers
Chapt 01 Assembly Language
Bill redirect manual
PlaySIM Project Java One 2009

What's hot (20)

PDF
Assembly Language for x86 Processors 7th Edition Chapter 1: Basic Concepts
PPTX
Assembly Language In Electronics
PDF
Assembly Language for x86 Processors 7th Edition Chapter 2 : x86 Processor Ar...
PDF
Customize Your Car: An Adventure in Using Elixir and Nerves to Hack Your Vehi...
PDF
Delta ia hmi-dop100-c_en_20201230_web
DOC
Most important abbreviation
PDF
Intra Institutional Communication System
PDF
Feature satip4
PDF
Internet of things laboratory
PDF
Feature satip4
PPTX
Introduction to Assembly Language Programming
PDF
Breve Sistema de Desenvolvimento Merrii a31
PDF
SETU VFXTH March 2014
ODP
Multipilot pres-ufficiale last 2
PDF
Feature satip4
PDF
Android Bluetooth Introduction
PPTX
Assembly Language
PPTX
Intro to assembly language
PPT
operating and configuring cisco a cisco IOS device
Assembly Language for x86 Processors 7th Edition Chapter 1: Basic Concepts
Assembly Language In Electronics
Assembly Language for x86 Processors 7th Edition Chapter 2 : x86 Processor Ar...
Customize Your Car: An Adventure in Using Elixir and Nerves to Hack Your Vehi...
Delta ia hmi-dop100-c_en_20201230_web
Most important abbreviation
Intra Institutional Communication System
Feature satip4
Internet of things laboratory
Feature satip4
Introduction to Assembly Language Programming
Breve Sistema de Desenvolvimento Merrii a31
SETU VFXTH March 2014
Multipilot pres-ufficiale last 2
Feature satip4
Android Bluetooth Introduction
Assembly Language
Intro to assembly language
operating and configuring cisco a cisco IOS device
Ad

Similar to DEFCON 23 - Joshua Smith - high def fuzzing - exploitation over HDMI-CEC (20)

PDF
High Definition Fuzzing; Exploring HDMI vulnerabilities
PPT
Client Server Development – Problems in Supporting Different Wireless Platform
PPT
MSMDC_CLI363
PDF
Smart TV Security - #1984 in 21st century -
PPTX
Driver Configuration Webinar
PPT
PPT
PDF
Raspberry pi glossary of terms dictionary extended
PDF
Understanding computer networks
PDF
23c3 Bluetooth hacking revisited
PDF
PPT
Putting an Apple IIgs BBS on the internet
PPT
BonAHA framework - Lab presentation
PDF
13.30 hr Hebinck
PDF
SIGFOX Makers Tour - Dublin
PPT
Cellphone based home automation
PDF
Hacking, Surveilling, and Deceiving Victims on Smart TV
PDF
Kernel Recipes 2017 - HDMI CEC: Status Report - Hans Verkuil
PDF
SIGFOX Makers Tour - Porto
PPT
PSoC USB HID
High Definition Fuzzing; Exploring HDMI vulnerabilities
Client Server Development – Problems in Supporting Different Wireless Platform
MSMDC_CLI363
Smart TV Security - #1984 in 21st century -
Driver Configuration Webinar
Raspberry pi glossary of terms dictionary extended
Understanding computer networks
23c3 Bluetooth hacking revisited
Putting an Apple IIgs BBS on the internet
BonAHA framework - Lab presentation
13.30 hr Hebinck
SIGFOX Makers Tour - Dublin
Cellphone based home automation
Hacking, Surveilling, and Deceiving Victims on Smart TV
Kernel Recipes 2017 - HDMI CEC: Status Report - Hans Verkuil
SIGFOX Makers Tour - Porto
PSoC USB HID
Ad

More from Felipe Prado (20)

PDF
DEF CON 24 - Sean Metcalf - beyond the mcse red teaming active directory
PDF
DEF CON 24 - Bertin Bervis and James Jara - exploiting and attacking seismolo...
PDF
DEF CON 24 - Tamas Szakaly - help i got ants
PDF
DEF CON 24 - Ladar Levison - compelled decryption
PDF
DEF CON 24 - Clarence Chio - machine duping 101
PDF
DEF CON 24 - Chris Rock - how to overthrow a government
PDF
DEF CON 24 - Fitzpatrick and Grand - 101 ways to brick your hardware
PDF
DEF CON 24 - Rogan Dawes and Dominic White - universal serial aBUSe remote at...
PDF
DEF CON 24 - Jay Beale and Larry Pesce - phishing without frustration
PDF
DEF CON 24 - Gorenc Sands - hacker machine interface
PDF
DEF CON 24 - Allan Cecil and DwangoAC - tasbot the perfectionist
PDF
DEF CON 24 - Rose and Ramsey - picking bluetooth low energy locks
PDF
DEF CON 24 - Rich Mogull - pragmatic cloud security
PDF
DEF CON 24 - Grant Bugher - Bypassing captive portals
PDF
DEF CON 24 - Patrick Wardle - 99 problems little snitch
PDF
DEF CON 24 - Plore - side -channel attacks on high security electronic safe l...
PDF
DEF CON 24 - Six Volts and Haystack - cheap tools for hacking heavy trucks
PDF
DEF CON 24 - Dinesh and Shetty - practical android application exploitation
PDF
DEF CON 24 - Klijnsma and Tentler - stargate pivoting through vnc
PDF
DEF CON 24 - Antonio Joseph - fuzzing android devices
DEF CON 24 - Sean Metcalf - beyond the mcse red teaming active directory
DEF CON 24 - Bertin Bervis and James Jara - exploiting and attacking seismolo...
DEF CON 24 - Tamas Szakaly - help i got ants
DEF CON 24 - Ladar Levison - compelled decryption
DEF CON 24 - Clarence Chio - machine duping 101
DEF CON 24 - Chris Rock - how to overthrow a government
DEF CON 24 - Fitzpatrick and Grand - 101 ways to brick your hardware
DEF CON 24 - Rogan Dawes and Dominic White - universal serial aBUSe remote at...
DEF CON 24 - Jay Beale and Larry Pesce - phishing without frustration
DEF CON 24 - Gorenc Sands - hacker machine interface
DEF CON 24 - Allan Cecil and DwangoAC - tasbot the perfectionist
DEF CON 24 - Rose and Ramsey - picking bluetooth low energy locks
DEF CON 24 - Rich Mogull - pragmatic cloud security
DEF CON 24 - Grant Bugher - Bypassing captive portals
DEF CON 24 - Patrick Wardle - 99 problems little snitch
DEF CON 24 - Plore - side -channel attacks on high security electronic safe l...
DEF CON 24 - Six Volts and Haystack - cheap tools for hacking heavy trucks
DEF CON 24 - Dinesh and Shetty - practical android application exploitation
DEF CON 24 - Klijnsma and Tentler - stargate pivoting through vnc
DEF CON 24 - Antonio Joseph - fuzzing android devices

Recently uploaded (20)

PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Getting Started with Data Integration: FME Form 101
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
A comparative analysis of optical character recognition models for extracting...
PPTX
Tartificialntelligence_presentation.pptx
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPT
Teaching material agriculture food technology
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
Machine Learning_overview_presentation.pptx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Machine learning based COVID-19 study performance prediction
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
Spectral efficient network and resource selection model in 5G networks
Getting Started with Data Integration: FME Form 101
Network Security Unit 5.pdf for BCA BBA.
Unlocking AI with Model Context Protocol (MCP)
Assigned Numbers - 2025 - Bluetooth® Document
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Per capita expenditure prediction using model stacking based on satellite ima...
A comparative analysis of optical character recognition models for extracting...
Tartificialntelligence_presentation.pptx
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Teaching material agriculture food technology
Mobile App Security Testing_ A Comprehensive Guide.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Machine Learning_overview_presentation.pptx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
“AI and Expert System Decision Support & Business Intelligence Systems”
Machine learning based COVID-19 study performance prediction
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
MIND Revenue Release Quarter 2 2025 Press Release
SOPHOS-XG Firewall Administrator PPT.pptx

DEFCON 23 - Joshua Smith - high def fuzzing - exploitation over HDMI-CEC

  • 1. HIGH-DEF FUZZING EXPLOITATION OVER HDMI-CEC name = "Joshua Smith" job = "Senior Security Researcher" job += "Zero Day Initiative" irc = "kernelsmith" twit = "@kernelsmith"
  • 2. Previous Research HDMI – Hacking Displays Made Interesting Andy Davis BlackHat EU 2012
  • 3. What is HDMI? High Def Multimedia Interface HDMI is a specification Implemented as Cables & Connectors Successor to DVI Has Quite a Few Features
  • 4. What is CEC? Consumer Electronics Control HDMI feature Allows user to command & control up to 15 devices Can relay commands from remotes It is what automatically changes your TV input Has some other intriguing features...
  • 5. Why? Wanted to research an area that was relatively untouched I do not have mad hardware skills I like RISC targets & assembly Another attack vector for mobile devices via: Mobile High-Definition Link (MHL) ~ Samsung & HTC Slimport ~ LG, Google Nexus, Blackberry My son is completely obsessed with cords/wires, esp HDMI
  • 6. Specs & Features History 1.0 (Dec 2002), 1.1 (May 2004), 1.2 (Aug 2005) Boring stuff 1.2a (Dec 2005) Fully specified Consumer Electronics Control This is the good stuff, for vulnerabilities anyway
  • 7. Specs & Features History Continued 1.3 - 1.3c (Jun 2006 through Aug 2008) Whizz-bang A/V improvements & new connectors 1.4 (May 2009) Most widely deployed and available Features++: 4k, HEC, ARC, 3D, micro connector Some that might interest us (next) 2.0 (Sep 2013) New hotness: 4K video @60fps, Dual View, 3D++, CEC++
  • 8. Specs & Features Interesting 1.4 Features HEC (HDMI Ethernet Connection) Sounds tasty 100Mb/s Enables traditional networking w/HDMI ARC (Audio Return Channel)
  • 9. CEC Details 1-wire bidirectional serial bus Slow: 500Mb/s Uses AV.link protocol to perform remote control functions For HDMI: CEC wiring is mandatory CEC functionality (software mainly) is optional
  • 10. CEC's Goals Simplify system integration Common protocol Extendable (vendor-specific commands) Commands are grouped together into Feature Sets For example, one-touch play (OTP) TV on, text view on (optional), set active source
  • 11. Notable Implementations Commercial industry uses various trade names Anynet+ (Samsung), Aquos Link (Sharp), BRAVIA Link/Sync (Sony) SimpLink (LG), VIERA Link (Panasonic), EasyLink (Philips), etc Open Source libCEC (dual commercial license)
  • 12. Android HDMI-CEC Not-HDMI CEC Slimport Mobile High-Definition Link (MHL) Notes: TODO: add tidbits about Slimport and MHL, like overloading the connector etc
  • 13. CEC Addressing PHYSICAL N.N.N.N where 0x0<=N<=0xF Like F.A.4.0 Obtained on hot-plug from EDID The root display is always 0.0.0.0 If attached to 1st input on root: 1.0.0.0 Required as CEC has a notion of switching
  • 14. CEC Addressing LOGICAL L where 0x0<=L<=0xF Root display is always 0 By product type Negotiated w/other devices Example: first STB in system is always 3 Non-CEC devices only have physical addr
  • 15. Logical Addresses Address Device Address Device 0 TV 8 Playback Dev 2 1 Rec. Device 1 9 Rec Device 3 2 Rec. Device 2 10 Tuner 4 3 Tuner 1 11 Playback Dev 3 4 Playback Dev 1 12 Reserved 5 Audio System 13 Reserved 6 Tuner 2 14 Free Use 7 Tuner 3 15 Unreg/Broadcast
  • 17. Blocks & Frames Blocks Each block is 10 bits Max of 16 blocks (14 purely data blocks) Frames (1bit) Start bit (10bits) Header block (10bits) Opcode block (10bits) Optional data block(s)
  • 18. Header Block Source Dest EoM Ack 3 2 1 0 3 2 1 0 E A (4bits) Logical address of source (4bits) Logical address of dest (2bits) Control bits (EoM & Ack) Example: 0100:0000:0:0 = Src 4, Dest 0
  • 19. Data Block Data EoM Ack 7 6 5 4 3 2 1 0 E A (8bits) Data (Big-endian/MSB first) (2bits) Control bits (EoM & Ack) Example: 01000001:1:0 = "A"
  • 20. CEC Protocol Pinging and Polling The "Ping" EOM bit in header is set to 1 Used to poll for devices etc (fuzz monitor?) Source & dest addresses will be different Also used for allocating Logical Addresses Source & dest addresses are the same
  • 21. CEC Protocol Additional Info All numbers > 1 byte are transmitted as big-endian All bit sequences are sent MSB first Messages can be directly addressed, broadcast, or both Should ignore a message coming from address 15, unless: Message invokes a broadcast response Message has been sent by a CEC Switch The message is Standby
  • 22. CEC Protocol The Long and Short of It... 10:64:44:65:66:43:6F:6E:20:32:33 1F:82:10.00 SD:OP:41:42:43:44:45:46
  • 23. CEC Protocol Example Messages Name ID Feature Set Addr Parameters Poll Sys Info Direct Get CEC Ver 9F Sys Info Direct CEC Version 9E Sys Info Direct CEC Version Set OSD Name 47 OSD Xfer Direct OSD Name Set OSD Str 64 OSD Disp Direct DispCtrl,Str Active Source 82 OTP, RC Bcast Phys Addr
  • 24. CEC Protocol Transmission (Flow) Control 3 mechanisms to provide reliable frame transfer 1. Frame re-transmissions (1 to 5) 2. Flow control 3. Frame validation (ignore msgs w/wrong #args) A message is assumed correctly received when: It has been transmitted and acknowledged A message is assumed to have been acted upon when: Sender does not receive Feature Abort w/in 1sec
  • 25. Common Sequences Addressing 1. Discovery (poll etc) of new physical address 2. Allocation (of logical address) 3. Report by broadcasting ReportPhysicalAddress Become active source 1. Broadcast an ActiveSource to declare intention 2. Presently active source shall act appropriately
  • 26. Feature Sets One-Touch Play (OTP) ImageViewOn* 40:04 (assumes playback dev 1) TextViewOn 4F:0D (optional, remove displayed menus) ActiveSource 4F:82 (assumes playback dev 1)
  • 27. Attack Vectors HDMI Ethernet Channel (HEC) Network connectivity to things thought un-networked Great place to hide Targetable devices TVs, BluRays, receivers, "TV Sticks", game consoles? Mobile phones & tablets Devices implementing MHL/Slimport Known popular mobile devices that implement MHL
  • 28. Attack Surface CEC commands HEC commands CDC commands
  • 29. Finding Vulns Approaches Identify "at-risk" messages & fuzz Source Code Analysis Hard to come by except libCEC & Android Reverse Engineering Can be hard to get all the firmwarez Expect different architectures MIPS, ARM, ARC etc MIPS is generally most popular so far
  • 30. Interesting Messages String operations Set OSD Name (0x47) Preferred name for use in any OSD (menus) Set OSD String (0x64) Text string to the TV for display Set Timer Program Title (0x67) Set the name of a program associated w/a timer Vendor-specific Messages Because who knows what they might do
  • 31. In Order to Fuzz We Need to Answer Some Questions How can we send arbitrary CEC messages? How can we detect if a crash occurred?
  • 32. Sending Messages Hardware ~0 {lap,desk}tops with HDMI-CEC Many have HDMI, none have CEC Adapters Pulse-Eight USB-HDMI RainShadow HDMI-CEC to USB Bridge Raspberry Pi RPi & P8 adapter both use libCEC :)
  • 33. Sending Messages Software Pulse-Eight driver is open source (libCEC) Dual-licensed actually (GPLv2/Commercial) Python SWIG-based bindings Supports a handful of devices
  • 34. Fuzzing CEC libCEC Can send CEC messages with: Raspberry Pi + libCEC P8 USB-HDMI adapter + libCEC But can we really send arbitrary CEC messages? lib.Transmit(CommandFromString("10:82:41:41:41:41:41:41:41:41:41")) YES. It would appear at least. To know for sure, had to ensure libCEC was not validating.
  • 35. Demo
  • 36. Fuzzing Process It has been with Python + RainbowTech serial API I actually did not know this until late in the research RainbowTech device has a nice simple serial API Not much complex functionality I had already started down the path below libCEC + Python since pyCecClient is already a thing Can use the P8 USB adapter and/or Raspberry Pi(s) May port to Ruby since SWIG & Ruby++ done
  • 37. Fuzzing Process Major Steps ID Target and Inputs Generate Fuzzed Data Execute Fuzzed Data Monitor for Exceptions Determine Exploitability Fuzzing: Brute Force Vulnerability Discovery (Sutton, Michael; Greene, Adam; Amini, Pedram)
  • 38. Generate Fuzzed Data Started with "long" strings and string-based messages Format strings Parameter abuse Vendor-specific messages Simple bit-flipping Adopted some from Davis work
  • 39. Execute Fuzzed 1. Poll device 2. Send message
  • 40. Monitor for Exceptions 1. Check for ack if applicable 2. Poll again 3. If debug, use that 4. If shell, check if service/app still running 5. If TV, will probably notice crash, fun, hard to automate 6. If exception, record msg & state & debug details if avail
  • 41. DETERMINE EXPLOITABILITY This is kind of an adventure unless debug Specific to each device
  • 42. Fuzzing Complications Getting Hold of Devices They are around you however, just need to look Can also emulate w/QEMU + firmware Speed 500 bits/s Not much we can do about that Fuzz multiple devices simultaneously RE targets to focus the fuzz
  • 43. Fuzzing Complications Continued Debugging Need to get access to the device Probably no debugger Often painful to compile one for it Collect Data Deduplicate Repro
  • 44. Targets Home Theater Devices Samsung Blu-ray Player (MIPS) Targeted because already have shell (Thx Ricky Lawshae) Local shell to get on & study device Philips Blu-ray Player Samsung TV Panasonic TV Chromecast Amazon Fire TV Stick
  • 45. Targets Mobile devices Kindle Fire Galaxy S5 (S6 dropped MHL) Galaxy Note Chromebook
  • 47. Vulns Discovered Demos & Videos Panasonic TV Samsung Blu-ray Player
  • 50. Post exploitation Enable HEC Enable LAN Attack LAN services if nec Enable higher speed exfil etc Wake-Over-CEC Beachhead for attacking other devices Hiding
  • 51. Future Work Explore Attack Surface of HDMI: 3D, Audio Return Channel, more w/HEC Feature adds to CEC Moar devices Emulation Undo bad Python
  • 52. Conclusion Becoming more and more pervasive and invasive Old vuln types are new again Hard, sometimes impossible, to upgrade, maintain, configure Risk = Vulnerabilty x Exposure x Impact The vulns are there Exposure is growing Impact is probably highest for your privacy What next? How do we fix or mitigate this?
  • 53. References Simplified Wrapper & Interface Generator Reveal.js blackhat.com/bh-eu-12-Davis-HDMI github.com/Pulse-Eight/libcec hdmi.org cec-o-matic.com/ p8-USB-HDMI-adapter swig.org github.com/hakimel/reveal.js