Данные вулны были успешно проэксплуатированы на недавнем Pwn2Own:
Zero Day Initiative — Pwn2Own Berlin 2025: Day Two Results
Welcome to the second day of our first ever Pwn2OwnBerlin. Yesterday, we awarded $260,000 for some amazing research. Today looks to be even better, with more AI on the line, plus SharePoint and VMware ESXi. As always, we’ll be updating this blog with results as we have them.
Zero Day Initiative — Pwn2Own Berlin 2025: Day Three Results
Welcome to the third and final day of Pwn2Own Berlin 2025. We' start the day at $695,000 awarded for the contest. It will be interesting to see if we can breach the million dollar mark. Stay tuned for all of the results.
CVE-2025-4920: Out-of-bounds access when resolving Promise objects
CVE-2025-4920 - OOB access вулна в Mozilla Firefox к объектам Promise JS, особенно в "комбинаторах" Promise, таких как Promise.all , Promise.allSettled и Promise.any.Зафикшена тут:
Исходя из первичного анализа фикса:
Манипуляции с "комбинатором" Promise, таким как Promise.allSettled -> триггерим ошибку рассинхронизации индекса через race condition -> записываем в массив 'values' / 'errors' -> ...
Promise.allSettled() - JavaScript | MDN
The Promise.allSettled() static method takes an iterable of promises as input and returns a single Promise. This returned promise fulfills when all of the input's promises settle (including when an empty iterable is passed), with an array of objects that describe the outcome of each promise.
Promise.reject() - JavaScript | MDN
The Promise.reject() static method returns a Promise object that is rejected with a given reason.
Promise.resolve() - JavaScript | MDN
The Promise.resolve() static method "resolves" a given value to a Promise. If the value is a promise, that promise is returned; if the value is a thenable, Promise.resolve() will call the then() method with two callbacks it prepared; otherwise the returned promise will be fulfilled with the value.
CVE-2025-4921: Out-of-bounds access when optimizing linear sums
Функция ExtractLinearSum неправильно обрабатывала арифметические операции в модульном математическом пространстве ака MathSpace::Modulo (операции, подверженные целочисленному переполнению). При разложении инструкций на линейные суммы функция рассматривала операции по модулю пространства как совместимые с арифметикой бесконечной точности. Это приводило к тому, что компилятор неправильно вычислял допустимые диапазоны индексов массива, исключая необходимые проверки границ при неверных предположениях.Зафикшено тут:
В таком случае, атакующий мог создать JS-код с арифметикой, которая запускает модульно-пространственную оптимизацию
То есть условно:
JavaScript:
let index = (array.length + 1) | 0;
let value = array[index];
1527839 - Crash [@ js::jit::ExtractLinearSum] with stack space exhaustion
RESOLVED (kanishk509) in Core - JavaScript Engine. Last updated 2020-08-13.
1528829 - (CVE-2019-9793) Arbitrary range mis-inference due to loop phi range analysis disregarding overflows/truncation
RESOLVED (nicolas.b.pierron) in Core - JavaScript Engine: JIT. Last updated 2024-05-30.