Nest is a framework for building scalable Node.js server-side applications. Prior to 11.2.4 and 12.0.2, a single message with a deeply nested object in its pattern can terminate a NestJS microservice using the TCP or RabbitMQ transport. ServerTCP#handleMessage and ServerRMQ#handleMessage pass a client-controlled non-string pattern to JSON.stringify to derive the handler lookup key; sufficiently deep nesting throws RangeError: Maximum call stack size exceeded, and the unhandled promise rejection terminates Node.js under its default behavior. An attacker who can reach the TCP port or publish to the consumed RabbitMQ queue or exchange can crash the service on demand; other transports are not affected because their patterns arrive as strings. This issue is fixed in versions 11.2.4 and 12.0.2.
PUBLISHED5.2CWE-248CWE-674
Nest: Remote process termination via a deeply nested microservice message pattern
Problem type
Affected products
nestjs
nest
< 11.2.4 - AFFECTED
>= 12.0.0, < 12.0.2 - AFFECTED
References
https://github.com/nestjs/nest/security/advisories/GHSA-m8vh-jmq9-5rjg
https://github.com/nestjs/nest/security/advisories/GHSA-m8vh-jmq9-5rjg
https://github.com/nestjs/nest/pull/17737
https://github.com/nestjs/nest/pull/17737
https://github.com/nestjs/nest/commit/aa97b5144d8dff1ce700aac521eb86449a679d6f
https://github.com/nestjs/nest/commit/aa97b5144d8dff1ce700aac521eb86449a679d6f
https://github.com/nestjs/nest/commit/e9dcd4c7ac64361fbfe79461da85f5b3fc3e02da
https://github.com/nestjs/nest/commit/e9dcd4c7ac64361fbfe79461da85f5b3fc3e02da
https://github.com/nestjs/nest/releases/tag/v11.2.4
https://github.com/nestjs/nest/releases/tag/v11.2.4
https://github.com/nestjs/nest/releases/tag/v12.0.2
https://github.com/nestjs/nest/releases/tag/v12.0.2
JSON source
https://cveawg.mitre.org/api/cve/CVE-2026-102281Click to expand
{
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"cveMetadata": {
"cveId": "CVE-2026-102281",
"assignerOrgId": "a0819718-46f1-4df5-94e2-005712e83aaa",
"assignerShortName": "GitHub_M",
"dateUpdated": "2026-09-28T21:21:25.047Z",
"dateReserved": "2026-09-28T20:11:16.659Z",
"datePublished": "2026-09-28T21:21:25.047Z",
"state": "PUBLISHED"
},
"containers": {
"cna": {
"providerMetadata": {
"orgId": "a0819718-46f1-4df5-94e2-005712e83aaa",
"shortName": "GitHub_M",
"dateUpdated": "2026-09-28T21:21:25.047Z"
},
"title": "Nest: Remote process termination via a deeply nested microservice message pattern",
"descriptions": [
{
"lang": "en",
"value": "Nest is a framework for building scalable Node.js server-side applications. Prior to 11.2.4 and 12.0.2, a single message with a deeply nested object in its pattern can terminate a NestJS microservice using the TCP or RabbitMQ transport. ServerTCP#handleMessage and ServerRMQ#handleMessage pass a client-controlled non-string pattern to JSON.stringify to derive the handler lookup key; sufficiently deep nesting throws RangeError: Maximum call stack size exceeded, and the unhandled promise rejection terminates Node.js under its default behavior. An attacker who can reach the TCP port or publish to the consumed RabbitMQ queue or exchange can crash the service on demand; other transports are not affected because their patterns arrive as strings. This issue is fixed in versions 11.2.4 and 12.0.2."
}
],
"affected": [
{
"vendor": "nestjs",
"product": "nest",
"versions": [
{
"version": "< 11.2.4",
"status": "affected"
},
{
"version": ">= 12.0.0, < 12.0.2",
"status": "affected"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"lang": "en",
"description": "CWE-248: Uncaught Exception",
"cweId": "CWE-248",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"lang": "en",
"description": "CWE-674: Uncontrolled Recursion",
"cweId": "CWE-674",
"type": "CWE"
}
]
}
],
"references": [
{
"url": "https://github.com/nestjs/nest/security/advisories/GHSA-m8vh-jmq9-5rjg",
"name": "https://github.com/nestjs/nest/security/advisories/GHSA-m8vh-jmq9-5rjg",
"tags": [
"x_refsource_CONFIRM"
]
},
{
"url": "https://github.com/nestjs/nest/pull/17737",
"name": "https://github.com/nestjs/nest/pull/17737",
"tags": [
"x_refsource_MISC"
]
},
{
"url": "https://github.com/nestjs/nest/commit/aa97b5144d8dff1ce700aac521eb86449a679d6f",
"name": "https://github.com/nestjs/nest/commit/aa97b5144d8dff1ce700aac521eb86449a679d6f",
"tags": [
"x_refsource_MISC"
]
},
{
"url": "https://github.com/nestjs/nest/commit/e9dcd4c7ac64361fbfe79461da85f5b3fc3e02da",
"name": "https://github.com/nestjs/nest/commit/e9dcd4c7ac64361fbfe79461da85f5b3fc3e02da",
"tags": [
"x_refsource_MISC"
]
},
{
"url": "https://github.com/nestjs/nest/releases/tag/v11.2.4",
"name": "https://github.com/nestjs/nest/releases/tag/v11.2.4",
"tags": [
"x_refsource_MISC"
]
},
{
"url": "https://github.com/nestjs/nest/releases/tag/v12.0.2",
"name": "https://github.com/nestjs/nest/releases/tag/v12.0.2",
"tags": [
"x_refsource_MISC"
]
}
],
"metrics": [
{
"cvssV3_1": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "NONE",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"availabilityImpact": "HIGH",
"baseScore": 7.5,
"baseSeverity": "HIGH"
}
}
]
}
}
}