Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

FeedsContactPrivacy© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
samsung_tizen_tv_root — Research toolkit that roots a Samsung Tizen 9 TV via a Chromium WasmGC RCE and V4L2 physmap arbitrary physical memory access, with persistent on-boot payload and root shell channel. | Kitploit
Tools/GitHubGitHub/commit-regrets/samsung_tizen_tv_root
Embedded Systems SecurityPrivilege EscalationMemory ForensicsPersistence MechanismsExploitationReverse EngineeringPost-ExploitationHardware & IoT Security

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share
Papers & Research
Remote Access Tool
Binary Exploitation
GitHubcommit-regrets/samsung_tizen_tv_root

samsung_tizen_tv_root

Research toolkit that roots a Samsung Tizen 9 TV via a Chromium WasmGC RCE and V4L2 physmap arbitrary physical memory access, with persistent on-boot payload and root shell channel.

View Repository
152461 day agoNot yet reviewed

Samsung Tizen 9 TV Root — Research Toolkit

Unofficial security research on a 2024 Samsung Neo QLED running Tizen 9. No sdb, no developer mode, no firmware flashing: the TV is rooted from its own browser, and the root is made persistent through a stock on-boot service app.

Test unit2024 Neo QLED, QNX1D series (QTV T09 platform)
FirmwareT-PTMxxxx (01400)
KernelLinux 5.4.249, ARM32 (VMSPLIT_3G + HIGHMEM, no LPAE), PAGE_OFFSET 0xC0000000, PHYS_OFFSET 0x20000000
BrowserChromium 120.0.6099.5 (SamsungBrowser/7.0)
Rootuid=0, CapEff=0x3fffffffff
Persistent payloadrepo v41 (current md5/size in the AGENTS.md state row — regenerated from the artifact); the test unit runs the same build (deployed 2026-10-27, beacons carry tok=); payload_backup.dll keeps the previous build
Root channelTCP 31337 on the TV, line protocol, replies end with __END__

Quick start

pwsh -File .\root.ps1 -TvIp <tv-ip>        # root the TV
pwsh -File .\uninstall.ps1 -TvIp <tv-ip>   # restore stock

root.ps1 runs on the PC and drives everything: it starts the port-80 server, roots the browser stub, installs the boot payload, and waits for the root channel after the reboot. Two steps stay on the TV remote, and it prompts for both:

  1. open the printed http://<pc-ip>/index.html and wait for RUNNING;
  2. power-cycle the TV once the deploy is verified.

Then:

python tools\root_shell.py "id" <tv-ip>   # talk to the TV's root channel

Every option, the exact prompts, expected output, the host-IP caveat and the manual fallback: docs/USAGE.md.

How it works

  1. Browser RCE — CVE-2024-2887 (WasmGC type confusion) in Chromium 120 gives arbitrary read/write and ARM shellcode execution inside the renderer.
  2. Physmap — the V4L2 codec nodes (/dev/video40/30/60) accept an attacker-chosen vm_pgoff in mmap() and pass it to remap_pfn_range() unvalidated: arbitrary physical memory read/write from an unprivileged process (uid 5001, group video).
  3. Root — find the kernel Image and init_task in physical memory, locate our own task through a forked child's real_parent, and zero the credentials.
  4. Persistence — replace the IL assembly of a stock app_onboot service with a .NET payload that repeats the physmap/cred patch at every boot, closes its node and serves a root command channel on TCP 31337.

No GPU CVE, no kernel exploit, no signed module. The physmap is the interesting part; the stage-by-stage writeup with the measured constants is docs/EXPLOIT.md.

Documentation

DocumentContents
docs/USAGE.mdrunning it: options, prompts, expected output, uninstall detail, recovery
docs/EXPLOIT.mdthe chain stage by stage, with the firmware-specific constants
docs/ROOT-METHODS.mdevery root/persistence method evaluated and the one that won
docs/FAILED.mdwhat did not work and why — reads like a list of dead ends, saves weeks
docs/BOOT-REGRESSION-SMACK.mdthe subtlest bug in the project: a wrong SMACK label made the app die before Main
docs/PORTABILITY.mdanother Tizen 9 TV: the four gates, what to re-measure, a step-by-step port
docs/SERVER-HOSTING.mdthe PC-side server: how it must run, the silent-death trap, firewall, logs
docs/SCRIPT-REVIEW.mdproduction-readiness audit of the scripts
docs/TESTING.mdthe test layers, offline and on-TV, and what each catches
docs/LOGGUIDE.mdevery beacon and tool error decoded, with next steps
docs/REFERENCE-MATERIALS.mdwhere to download firmware / GPL sources / sim tooling for your own model
docs/REVIEW-HISTORY.mdclosed review findings and their evidence (archive)
docs/OPEN-ISSUES.mdcurrent state, pending work, and the closed review/pass history
AGENTS.mdhand-off: tools, procedure, verification, traps, recovery
CHANGELOG.mddated history of what changed and why
SECURITY.mdthe unauthenticated 31337 backdoor, scope, reporting, legal
NOTICE.mdthird-party attribution; which files are not relicensed
LICENSEMIT for the original work (third-party files excluded)

Repository layout

root.ps1, uninstall.ps1     PC entry points (PowerShell)
payload/                    boot payload source (.NET 6, Program.cs)
server/                     port-80 server, exploit page, TV-side deploy scripts
tools/                      physmap client, kernel helpers, build scripts
docs/                       the documents above
AGENTS.md                   hand-off notes
LICENSE, NOTICE.md          license + third-party attribution
SECURITY.md                 backdoor/scope/reporting

The whole toolkit is committed, so a clone runs without any other working tree. server/payload.dll is included on purpose (byte-identical to the build output) so the toolkit works without a .NET SDK. Runtime logs, build output and the per-host generated deploy script are git-ignored and never served over HTTP.

Requirements

  • The same TV family and firmware generation — see docs/PORTABILITY.md before trying another model.
  • A PC on the same LAN, able to receive TCP/80 from the TV and reach TCP/31337 on it. No address is committed for the normal flow: server/deploy.sh is a template whose H=/WANT=/SIZE_WANT=/TOKEN= markers server.py renders per request from the address the TV used and the payload actually served, the page rewrites the shellcode's callback (IP and port), and the payload reads share/rootchan.host. The compiled-in Host is a TEST-NET placeholder.
  • Python 3 on the PC. On Windows the server must run under an interpreter path the firewall allows (see docs/SERVER-HOSTING.md).
  • .NET SDK only if you rebuild the boot payload — payload/global.json pins 10.0.x (rollForward: latestPatch); the project targets net6.0, which the pinned SDK still builds (an EOL warning is expected).
Download Tool