Sploitus

Exploit for CVE-2026-4692-trust-me-im-in-rdm

kitploit · 2026-08-27

Exploit Code

MARKDOWN69 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-SNEAKYNACHOS-CVE-2026-4692-TRUST-ME-IM-IN-RDM
# CVE-2026-4692 — контентные процессы могут объявлять себя в RDM

Proof of concept для отсутствующей проверки авторизации при синхронизации поля BrowsingContext: скомпрометированный контентный процесс подделывает сообщение `PContent::CommitBrowsingContextTransaction`, устанавливая `InRDMPane = true` в собственном top-level BrowsingContext, и родительский процесс **применяет его**.

Цель: Firefox 149.0a1 nightly @ `2fbc0748c4` (уязвимая, до исправления), macOS arm64. Исправлено в Firefox 149 — баг 2017643, коммит `a9279ce332ed` («Prevent toggling RDM BrowsingContext flag from content processes»), который добавляет:

root@kitploit:~
    
    
    bool BrowsingContext::CanSet(FieldIndex<IDX_InRDMPane>, const bool&,
                                 ContentParent* aSource) {
      return XRE_IsParentProcess() && IsTop() && !aSource;   // reject if from content
    }
    

## Почему это важно

`InRDMPane` сообщает родительскому процессу, что вкладка является панелью Responsive Design Mode. Родительский процесс доверяет этому при hit-testing синтезированных сенсорных событий (`BrowserParent::RecvDispatchTouchEvent`): события, номинально нацеленные на панель RDM, могут попадать на **привилегированный chrome UI**. Скомпрометированный контентный процесс, установивший флаг, может затем отправлять сенсорные события с отрицательными/внеконтентными координатами и кликать по привилегированному UI без взаимодействия с пользователем (см. `repro.patch` репортера в баге 2017643, который демонстрирует именно это с пропатченной сборкой). Этот репозиторий демонстрирует само нарушение границы, открывающее возможность, с реальной подделкой сообщения — без патчей исходников браузера.

## Сообщение (формат провода, извлечён из сгенерированного IPC-кода сборки)

`PContent::CommitBrowsingContextTransaction` — тип сообщения `0x3a0137` (`PContentMsgStart=58 << 16 | ordinal 311`), маршрутизация `MSG_ROUTING_CONTROL` (`INT64_MAX`), флаги `NOT_NESTED` (`0x001`):

root@kitploit:~
    
    
    u64  bcid                sentinel 235406151 ('aContext')
    u64  0x0000000000800000  modified bitset word0 (bit 23 = InRDMPane)
    u64  0                   bitset word1   (BitSet<84> words are size_t = u64!)
    u32  1                   WriteBool(true)
    u32  523371752           sentinel 'aTransaction'
    u64  epoch               (epoch check is MOZ_ASSERT-only; compiled out here)
    u32  132121169           sentinel 'aEpoch'
    

Доставка переиспользует путь отправки из CVE-2026-74939: `operator new` → `IPC::Message::Message(routing, type, capacity, flags)` → `Pickle::WriteBytes` → `MessageChannel::Send` по каналу PContent, управляемый из JS через примитив вызова wasm funcref (`wasm-bytes.js`, этап 1 = CVE-2026-2796).

## Доказательства

Лог родительского процесса (`MOZ_LOG=BrowsingContextSync:5`) после `./irun`:

root@kitploit:~
    
    
    D/BrowsingContextSync Transaction::Apply(#380000001, ipc): InRDMPane(false->true)
    

`#380000001` — это top-level BrowsingContext всплывающего окна (дочерний выделенный id, созданный `from IPC`), а `ipc` помечает транзакцию как исходящую из контента. На исправленной сборке то же сообщение не проходит проверку `CanSet` и отклоняется.

## Файлы

## Запуск

Предварительные требования: уязвимая сборка Nightly в `/Users/sid/gecko-2766/obj-browser`, `.venv` с psutil и запущенный встроенный логирующий сервер:

root@kitploit:~
    
    
    python3 srv.py > /tmp/srv4692.log 2>&1 &   # serves this dir on :8781
    python3 forge_bctx.py                      # build bctx.bin/bctx.json
    ./irun                                     # launch + inject + collect evidence
    

## Ссылки

  * Баг Mozilla 2017643 — коммит исправления `a9279ce332ed` (MFSA 2026-20, Firefox 149)
  * CVE-2026-74939 — механизм пути отправки, который здесь переиспользуется (`../poc-cve-2026-74939`)
  * CVE-2026-12295 — родственная подделка load-state (`../poc-cve-2026-12295`)