<div dir="ltr">After a conversation on twitter (<span style="color:rgb(0,0,0);font-family:Times;font-size:15px;white-space:pre-wrap"><a href="https://twitter.com/mikesherov/status/1256193257626836998?s=20">https://twitter.com/mikesherov/status/1256193257626836998?s=20</a>), to firm up what I'm proposing here is that preventing prototype pollution isn't really possible with Object.assign as is because it would have to change to not execute setters, which is a non-starter.</span><div><span style="color:rgb(0,0,0);font-family:Times;font-size:15px;white-space:pre-wrap"><br></span></div><div><span style="color:rgb(0,0,0);font-family:Times;font-size:15px;white-space:pre-wrap">I'm mostly left with a desire to discuss/learn what it would actually take to make a prototype pollution safe version of Object.assign, and this may not be the forum for that.</span></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, May 1, 2020 at 8:50 AM Mike Sherov <<a href="mailto:mike.sherov@gmail.com">mike.sherov@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Given the increased prevalence of prototype pollution vulnerabilities in many popular javascript libraries, is it time to reconsider the fact that Object.assign allows for prototype pollution by default?<br>
<br>
I see two options:<br>
1. Change Object.assign to disallow PP by default. Look at real world usages and see what would break if prototype pollution was disabled? Almost certainly this is not a viable option, but wanted to raise it here just in case there was appetite to do so.<br>
2. Introduce something like Object.safeAssign (bikeshedding aside), that is the same as Object.assign except is safe from prototype pollution.<br>
<br>
The reason I think this is important is that the common advice of freezing Object.prototype is something only the end user can do, and not something a library can do. <br>
<br>
Yes, a library can also know to do its own PP fixes, but having a reified way to avoid PP allows us to have a secure-by-default method in the language.<br>
<br>
Thoughts?<br>
<br>
Mike Sherov</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature">Mike Sherov<br><br></div>