GitHub Advisoryadvisory · npm, NuGet
GHSA-wc69-rhjr-hc9g Moment.js vulnerable to Inefficient Regular Expression Complexity
HIGH
Official page ↗
- Aliases
- CVE-2022-31129
- Ecosystem
- npm, NuGet
- Packages
- moment, Moment.js
- Severity
- High
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- Weaknesses
- CWE-1333, CWE-400
- Reviewed
- 2022-07-06
Affected packages
• npm moment: >= 2.18.0, < 2.29.4 → fixed in 2.29.4
• NuGet Moment.js: >= 2.18.0, < 2.29.4 → fixed in 2.29.4
Description
Impact
• using string-to-date parsing in moment (more specifically rfc2822 parsing, which is tried by default) has quadratic (N^2) complexity on specific inputs
• noticeable slowdown is observed with inputs above 10k characters
• users who pass user-provided strings without sanity length checks to moment constructor are vulnerable to (Re)DoS attacks
Patches
The problem is patched in 2.29.4, the patch can be applied to all affected versions with minimal tweaking.
Workarounds
In general, given the proliferation of ReDoS attacks, it makes sense to limit the length of the user input to something sane, like 200 characters or less. I haven't seen legitimate cases of date-time strings longer than that, so all moment users who do pass a user-originating string to constructor are encouraged to apply such a rudimentary filter, that would help with this but also most future ReDoS vulnerabilities.
References
There is an excellent writeup of the issue here: https://github.com/moment/moment/pull/6015#issuecomment-1152961973=
Details
The issue is rooted in the code that removes legacy comments (stuff inside parenthesis) from strings during rfc2822 parsing. `moment("(".repeat(500000))` will take a few minutes to process, which is unacceptable.
Related
Alias · CVE (1)
- CVE-2022-31129 moment is a JavaScript date library for parsing, validating, manipulating, and formatting dates. vulnerability
References
- https://github.com/moment/moment/security/advisories/GHSA-wc69-rhjr-hc9g web
- https://nvd.nist.gov/vuln/detail/CVE-2022-31129 advisory
- https://github.com/moment/moment/pull/6015#issuecomment-1152961973 web
- https://github.com/moment/moment/pull/6015/commits/4bbb9f3ccbe231de40207503f344fe5ce97584f4 web
- https://github.com/moment/moment/pull/6015/commits/bfd4f2375d5c1a2106246721d693a9611dddfbfe web
- https://github.com/moment/moment/pull/6015/commits/dc0d180e90d8a84f7ff13572363330a22b3ea504 web
- https://github.com/moment/moment/commit/9a3b5894f3d5d602948ac8a02e4ee528a49ca3a3 web
- https://security.netapp.com/advisory/ntap-20241108-0002 web
- https://security.netapp.com/advisory/ntap-20221014-0003 web
- https://lists.fedoraproject.org/archives/list/[email protected]/message/ZMX5YHELQVCGKKQVFXIYOTBMN23YYSRO web
- https://lists.fedoraproject.org/archives/list/[email protected]/message/ORJX2LF6KMPIHP6B2P6KZIVKMLE3LVJ5 web
- https://lists.fedoraproject.org/archives/list/[email protected]/message/IWY24RJA3SBJGA5N4CU4VBPHJPPPJL5O web
- https://lists.fedoraproject.org/archives/list/[email protected]/message/6QIO6YNLTK2T7SPKDS4JEL45FANLNC2Q web
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/ZMX5YHELQVCGKKQVFXIYOTBMN23YYSRO web
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/ORJX2LF6KMPIHP6B2P6KZIVKMLE3LVJ5 web
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/IWY24RJA3SBJGA5N4CU4VBPHJPPPJL5O web
- https://lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/6QIO6YNLTK2T7SPKDS4JEL45FANLNC2Q web
- https://lists.debian.org/debian-lts-announce/2023/01/msg00035.html web
- https://huntr.dev/bounties/f0952b67-f2ff-44a9-a9cd-99e0a87cb633 web
- https://github.com/moment/moment package