HexBrain

Internet Bug Bounty 路 Report #1647287

Disabling context isolation, nodeIntegrationInSubFrames using an unauthorised frame.

Validstatus
mediumseverity
16upvotes
11 Aug 2022disclosed

Summary

Compromised child renderer processes could obtain IPC access without nodeIntegrationInSubFrames being enabled

Affected versions: < 15.5.5 || >= 16.0.0-beta.1 < 16.2.6 || >= 17.0.0-beta.1 < 17.2.0 || >= 18.0.0-beta.1 < 18.0.0-beta.6

Patched versions: 15.5.5, 16.2.6, 17.2.0, 18.0.0-beta.6

Impact This vulnerability allows a renderer with JS execution to obtain access to a new renderer process with nodeIntegrationInSubFrames enabled which in turn allows effective access to ipcRenderer.

Please note the misleadingly named nodeIntegrationInSubFrames option does not implicitly grant Node.js access rather it depends on the existing sandbox setting. If your application is sandboxed then nodeIntegrationInSubFrames just gives access to the sandboxed renderer APIs (which includes ipcRenderer).

If your application then additionally exposes IPC messages without IPC senderFrame validation that perform privileged actions or return confidential data this access to ipcRenderer can in turn compromise your application / user even with the sandbox enabled.

Patches This has been patched and the following Electron versions contain the fix:

18.0.0-beta.6 17.2.0 16.2.6 15.5.5

Workarounds Ensure that all IPC message handlers appropriately validate senderFrame as per our security tutorial here.

For more information If you have any questions or comments about this advisory, email us at [email protected].

GHSA Link: https://github.com/electron/electron/security/advisories/GHSA-mq8j-3h7h-p8g7

Summary Here is the TL;DR of this bug.

  1. Electron patches blink WebPreferences and adds settings like node_integration_sub_frames, context_isolation, etc. {F1863624}
  2. If node_integration_in_sub_frames or on WebPreferences is true, then expose preload contextBridge API. {F1863627} https://github.com/electron/electron/blob/bd10b19b0cdc46cdbadb570af89305e64541b679/shell/renderer/electron_sandboxed_renderer_client.cc#L217
  3. You can notice that the check is on the renderer process.
  4. Using renderer exploit we can flip node_integration_in_sub_frames to 1 馃槇 .

Furthermore, We can do the same for context_isolation and disable context_isolation on a window and pollute Electron Internals to leak Electron Internal modules like IPC, shell etc.,

How it was found

Details can be found in the following github advisory: https://github.com/electron/electron/security/advisories/GHSA-mq8j-3h7h-p8g7

Impact

Using a renderer exploit, context isolation and nodeIntegrationInSubFrames can be disabled, which enables an attacker to leak IPC module and communicate with the more privileged main process which might eventually lead to Remote Code Execution if there are sensitive IPC handlers on main process.

This report was disclosed publicly on HackerOne and belongs to its author and the program. See the original