GitHub Advisoryadvisory · Packagist

GHSA-5pgm-3j3g-2rc7 Valinor error messages leading to potential data exfiltration before v0.12.0

HIGH Published 2022-07-12 Modified 2022-07-19 Official page ↗
Aliases
CVE-2022-31140
Ecosystem
Packagist
Packages
cuyz/valinor
Severity
High
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Weaknesses
CWE-200, CWE-209
Reviewed
2022-07-12

Affected packages

• Packagist cuyz/valinor: < 0.12.0 → fixed in 0.12.0

Description

```php registerConstructor([Money::class, 'fromString']) ->mapper(); try { var_dump($mapper->map(Foo::class, [ 'a' => 'HAHA', 'b' => '100 EUR', 'c' => 'USD 100' ])); } catch (MappingError $e) { $messages = (new NodeTraverser(function (Node $node) { foreach ($node->messages() as $message) { var_dump([ '$message', $message->path(), $message->body() ]); } return ''; }))->traverse($e->node()); iterator_to_array($messages); } ``` Now, this is quite innocent: it produces following output: ``` ❯ php value-object-conversion.php array(3) { [0]=> string(8) "$message" [1]=> string(1) "a" [2]=> string(48) "Given "HAHA" is not a recognized monetary amount" } array(3) { [0]=> string(8) "$message" [1]=> string(1) "c" [2]=> string(51) "Given "USD 100" is not a recognized monetary amount" } ``` The problem is that nowhere I told valinor that it could use `Throwable#getMessage()`. This is a problem with cases where you get: • an SQL exception showing an SQL snippet • a DB connection exception showing DB ip address/username/password • a timeout detail / out of memory detail (exploring DDoS possibilities) This allows for potential data exfiltration, DDoS, enumeration attacks, etc.

Related

Alias · CVE (1)

  • CVE-2022-31140 Valinor is a PHP library that helps to map any input into a strongly-typed value object structure. vulnerability

Weakness · CWE (2)

  • CWE-200 Exposure of Sensitive Information to an Unauthorized Actor weakness
  • CWE-209 Generation of Error Message Containing Sensitive Information weakness

References