Skip to content

Conversation

@Siebes
Copy link
Contributor

@Siebes Siebes commented Apr 1, 2020

credits JordanMilne (https://github.com/JordanMilne) #22

I confirm that this contribution is made under the terms of the license found in the root directory of this repository's source tree and that I have the authority necessary to make this contribution on behalf of its copyright owner.

Based on Jordan's comment here I believe he gave approval and I approve any merging I did :)
#22 (comment)

Previously we weren't checking if the quote that started the placeholder was escaped or not, meaning an object like {"foo": /1"/, "bar": "a\"@__R-<UID>-0__@"} Would be serialized as {"foo": /1"/, "bar": "a\/1"/} meaning an attacker could escape out of `bar` if they controlled both `foo` and `bar` and were able to guess the value of `<UID>`. UID was generated once on startup, was chosen using `Math.random()` and had a keyspace of roughly 4 billion, so within the realm of an online attack. Here's a simple example that will cause `console.log()` to be called when the `serialize()`d version is `eval()`d eval('('+ serialize({"foo": /1" + console.log(1)/i, "bar": '"@__R-<UID>-0__@'}) + ')'); Where `<UID>` is the guessed `UID`. This fixes the issue by ensuring that placeholders are not preceded by a backslash. We also switch to a higher entropy `UID` to prevent people from guessing it. credits JordanMilne (https://github.com/JordanMilne)
@Siebes Siebes requested a review from okuryu April 9, 2020 00:22
Copy link
Collaborator

@okuryu okuryu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for delay. I would like to try to merge this in. I will be working on a release that includes this as soon as possible. Thank you for your patience.

@okuryu okuryu merged commit f21a6fb into yahoo:master May 20, 2020
@okuryu
Copy link
Collaborator

okuryu commented May 28, 2020

Published serialize-javascript@3.1.0 today. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

3 participants