refactor: ensure IpcRenderer is not bridgable by MarshallOfSound · Pull Request #40330 · electron/electron · GitHub
https://github.com/electron/electron/pull/40330 • 382 KB fetched
Open original page
refactor: ensure IpcRenderer is not bridgable by MarshallOfSound · Pull Request #40330 · electron/electron · GitHub
Skip to content
Navigation Menu
Sign in Appearance settings
* Platform
* AI CODE CREATION
* GitHub Copilot Write better code with AI
* GitHub Copilot app Direct agents from issue to merge
* MCP Registry Integrate external tools
* DEVELOPER WORKFLOWS
* Actions Automate any workflow
* Codespaces Instant dev environments
* Issues Plan and track work
* Code Review Manage code changes
* Code Quality Enforce quality at merge
* APPLICATION SECURITY
* GitHub Advanced Security Find and fix vulnerabilities
* Code security Secure your code as you build
* Secret protection Stop leaks before they start
* EXPLORE
* Why GitHub
* Documentation
* Blog
* Changelog
* Marketplace
View all features
* Solutions
* BY COMPANY SIZE
* Enterprises
* Small and medium teams
* Startups
* Nonprofits
* BY USE CASE
* App Modernization
* DevSecOps
* DevOps
* CI/CD
* View all use cases
* BY INDUSTRY
* Healthcare
* Financial services
* Manufacturing
* Government
* View all industries
View all solutions
* Resources
* EXPLORE BY TOPIC
* AI
* Software Development
* DevOps
* Security
* View all topics
* EXPLORE BY TYPE
* Customer stories
* Events & webinars
* Ebooks & reports
* Business insights
* GitHub Skills
* SUPPORT & SERVICES
* Documentation
* Customer support
* Community forum
* Trust center
* Partners
View all resources
* Open Source
* COMMUNITY
* GitHub Sponsors Fund open source developers
* PROGRAMS
* Security Lab
* Maintainer Community
* GitHub Stars
* Archive Program
* REPOSITORIES
* Topics
* Trending
* Collections
* Enterprise
* ENTERPRISE SOLUTIONS
* Enterprise platform AI-powered developer platform
* AVAILABLE ADD-ONS
* GitHub Advanced Security Enterprise-grade security features
* Copilot for Business Enterprise-grade AI features
* Premium Support Enterprise-grade 24/7 support
* Pricing
Search /
Sign in
Sign up Appearance settings
You signed in with another tab or window. Reload to refresh your session.
You signed out in another tab or window. Reload to refresh your session.
You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
Uh oh!
There was an error while loading. Please reload this page .
electron
/
electron
Public
*
Notifications
You must be signed in to change notification settings
*
Fork
17.5k
*
Star
123k
*
Code
*
Issues
626
*
Pull requests
132
*
Actions
*
Projects
*
Security and quality
61
*
Insights
Additional navigation options
*
Code
*
Issues
*
Pull requests
*
Actions
*
Projects
*
Security and quality
*
Insights
refactor: ensure IpcRenderer is not bridgable - # 40330
# 40330
Merged
jkleinsc merged 3 commits into main electron/electron:main from prevent-ipc-renderer-bridge electron/electron:prevent-ipc-renderer-bridge Copy head branch name to clipboard
Oct 31, 2023
Conversation Commits 3 ( 3 ) Checks Files changed
Merged
refactor: ensure IpcRenderer is not bridgable # 40330 jkleinsc merged 3 commits into main electron/electron:main from prevent-ipc-renderer-bridge electron/electron:prevent-ipc-renderer-bridge Copy head branch name to clipboard
Conversation
MarshallOfSound
commented
Oct 25, 2023
Copy link
Copy Markdown
Member
It's a security footgun that IpcRenderer (unlike everything else) can go over the context bridge by accident. Let's just make it so it can't
Notes: no-notes
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page .
All reactions
MarshallOfSound
requested a review
from miniak
October 25, 2023 15:25
electron-cation
Bot
added
the
new-pr 🌱
PR opened recently
label
Oct 25, 2023
MarshallOfSound
requested a review
from codebytere
October 25, 2023 15:25
MarshallOfSound
added
semver/patch
backwards-compatible bug fixes
no-backport
labels
Oct 25, 2023
codebytere
approved these changes
Oct 25, 2023
View reviewed changes
miniak
approved these changes
Oct 25, 2023
View reviewed changes
miniak
commented
Oct 25, 2023
Copy link
Copy Markdown
Contributor
@MarshallOfSound would it make sense to do this as well for consistency?
class IpcRendererInternal extends EventEmitter implements ElectronInternal . IpcRendererInternal {
send ( channel : string , ... args : any [ ] ) {
return ipc . send ( internal , channel , args ) ;
}
sendSync ( channel : string , ... args : any [ ] ) {
return ipc . sendSync ( internal , channel , args ) ;
}
async invoke < T > ( channel : string , ... args : any [ ] ) {
const { error , result } = await ipc . invoke < T > ( internal , channel , args ) ;
if ( error ) {
throw new Error ( `Error invoking remote method ' ${ channel } ': ${ error } ` ) ;
}
return result ;
} ;
}
export const ipcRendererInternal = new IpcRendererInternal ( ) ;
All reactions
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page .
MarshallOfSound
commented
Oct 25, 2023
Copy link
Copy Markdown
Member
Author
@miniak Oh yeah sure
All reactions
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page .
electron-cation
Bot
removed
the
new-pr 🌱
PR opened recently
label
Oct 26, 2023
dsanders11
commented
Oct 30, 2023
Copy link
Copy Markdown
Member
Should this be considered a breaking change? In #40321 the docs are being updated to avoid the footgun pattern, but currently the IPC tutorial said "In the renderer process, use the event parameter to send a reply back to the main process [...]" (and gave a code example doing so). If someone followed that tutorial, won't this change break their code?
All reactions
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page .
MarshallOfSound
commented
Oct 30, 2023
Copy link
Copy Markdown
Member
Author
Should this be considered a breaking change?
In the sense we could note it somewhere, probably, in the sense that it's semver/major no. Security fixes aren't considered semver/major. No plans to backport this one though
All reactions
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page .
dsanders11
commented
Oct 30, 2023
Copy link
Copy Markdown
Member
In the sense we could note it somewhere, probably
Let's add it to breaking changes then. 👍
All reactions
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page .
MarshallOfSound
added 2 commits
October 30, 2023 22:43
refactor: ensure IpcRenderer is not bridgable
421c93c
chore: add notes to breaking-changes
d48bd5a
MarshallOfSound
force-pushed
the
prevent-ipc-renderer-bridge
branch
from
60ae5ba to
d48bd5a
Compare
October 31, 2023 05:48
MarshallOfSound
requested a review
from a team
as a code owner
October 31, 2023 05:48
jkleinsc
requested changes
Oct 31, 2023
View reviewed changes
jkleinsc
left a comment
Copy link
Copy Markdown
Member
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more .
Choose a reason
Spam
Abuse
Off Topic
Outdated
Duplicate
Resolved
Low Quality
Hide comment
Looks like this change is causing the node feature does not hang when using the fs module in the renderer process test to fail.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page .
All reactions
spec: fix test that bridged ipcrenderer
8a71f9c
jkleinsc
approved these changes
Oct 31, 2023
View reviewed changes
jkleinsc
merged commit 83892ab
into
main
Oct 31, 2023
jkleinsc
deleted the
prevent-ipc-renderer-bridge
branch
October 31, 2023 21:29
release-clerk
Bot
commented
Oct 31, 2023
Copy link
Copy Markdown
No Release Notes
All reactions
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page .
MrHuangJser
pushed a commit
to MrHuangJser/electron
that referenced
this pull request
Dec 11, 2023
refactor: ensure IpcRenderer is not bridgable ( electron#40330 )
...
39dcf66
* refactor: ensure IpcRenderer is not bridgable
* chore: add notes to breaking-changes
* spec: fix test that bridged ipcrenderer
dsanders11
mentioned this pull request
Aug 5, 2024
docs: api history
#42982
Merged
18 tasks
Sign up for free
to join this conversation on GitHub .
Already have an account?
Sign in to comment
Reviewers
jkleinsc
jkleinsc approved these changes
miniak
miniak approved these changes
codebytere
codebytere approved these changes
Assignees
No one assigned
Labels
no-backport
semver/patch
backwards-compatible bug fixes
Projects
None yet
Milestone
No milestone
Development
Successfully merging this pull request may close these issues.
Uh oh!
There was an error while loading. Please reload this page .
5 participants
Add this suggestion to a batch that can be applied as a single commit. This suggestion is invalid because no changes were made to the code. Suggestions cannot be applied while the pull request is closed. Suggestions cannot be applied while viewing a subset of changes. Only one suggestion per line can be applied in a batch. Add this suggestion to a batch that can be applied as a single commit. Applying suggestions on deleted lines is not supported. You must change the existing code in this line in order to create a valid suggestion. Outdated suggestions cannot be applied. This suggestion has been applied or marked resolved. Suggestions cannot be applied from pending reviews. Suggestions cannot be applied on multi-line comments. Suggestions cannot be applied while the pull request is queued to merge. Suggestion cannot be applied right now. Please check back later.
Footer
(c) 2026 GitHub, Inc.
Footer navigation
*
Terms
*
Privacy
*
Security
*
Status
*
Community
*
Docs
*
Contact
*
Manage cookies
*
Do not share my personal information
You can’t perform that action at this time.
Links found on this page
- Skip to content [direct]
- Sign in [direct]
- GitHub Copilot Write better code with AI [direct]
- GitHub Copilot app Direct agents from issue to merge [direct]
- MCP Registry Integrate external tools [direct]
- Actions Automate any workflow [direct]
- Codespaces Instant dev environments [direct]
- Issues Plan and track work [direct]
- Code Review Manage code changes [direct]
- Code Quality Enforce quality at merge [direct]
- GitHub Advanced Security Find and fix vulnerabilities [direct]
- Code security Secure your code as you build [direct]
- Secret protection Stop leaks before they start [direct]
- Why GitHub [direct]
- Documentation [direct]
- Blog [direct]
- Changelog [direct]
- Marketplace [direct]
- View all features [direct]
- Enterprises [direct]
- Small and medium teams [direct]
- Startups [direct]
- Nonprofits [direct]
- App Modernization [direct]
- DevSecOps [direct]
- DevOps [direct]
- CI/CD [direct]
- View all use cases [direct]
- Healthcare [direct]
- Financial services [direct]
- Manufacturing [direct]
- Government [direct]
- View all industries [direct]
- View all solutions [direct]
- AI [direct]
- Software Development [direct]
- DevOps [direct]
- Security [direct]
- View all topics [direct]
- Customer stories [direct]
- Events & webinars [direct]
- Ebooks & reports [direct]
- Business insights [direct]
- GitHub Skills [direct]
- Customer support [direct]
- Community forum [direct]
- Trust center [direct]
- Partners [direct]
- View all resources [direct]
- GitHub Sponsors Fund open source developers [direct]
- Security Lab [direct]
- Maintainer Community [direct]
- GitHub Stars [direct]
- Archive Program [direct]
- Topics [direct]
- Trending [direct]
- Collections [direct]
- Copilot for Business Enterprise-grade AI features [direct]
- Premium Support Enterprise-grade 24/7 support [direct]
- Pricing [direct]
- Sign up [direct]
- electron [direct]
- electron [direct]
- Notifications [direct]
- Issues
626 [direct]
- Pull requests
132 [direct]
- Actions [direct]
- Projects [direct]
- Security and quality
61 [direct]
- Insights [direct]
- jkleinsc [direct]
- main [direct]
- prevent-ipc-renderer-bridge [direct]
- Commits 3 ( 3 ) [direct]
- Checks [direct]
- Files changed [direct]
- MarshallOfSound [direct]
- miniak [direct]
- electron-cation [direct]
- new-pr 🌱 [direct]