In nghttp2 before version 1.41.0, the overly large HTTP/2 SETTINGS frame payload causes denial of service. The proof of concept attack involves a malicious client constructing a SETTINGS frame with a length of 14,400 bytes (2400 individual settings entries) over and over again. The attack causes the CPU to spike at 100%. nghttp2 v1.41.0 fixes this vulnerability. There is a workaround to this vulnerability. Implement nghttp2_on_frame_recv_callback callback, and if received frame is SETTINGS frame and the number of settings entries are large (e.g., > 32), then drop the connection.
En nghttp2 versiones anteriores a 1.41.0, la carga útil de la trama HTTP/2 SETTINGS demasiado grande causa una denegación de servicio. El ataque de prueba de concepto involucra a un cliente malicioso que construye una trama SETTINGS con una longitud de 14,400 bytes (2400 entradas de configuraciones individuales) una y otra vez. El ataque causa que la CPU se aumente al 100%. nghttp2 versión v1.41.0 corrige esta vulnerabilidad. Existe una solución alternativa a esta vulnerabilidad. Implemente la función nghttp2_on_frame_recv_callback callback, y si la trama es recibida es la trama SETTINGS y el número de entradas de configuración es grande (por ejemplo, mayor a 32), luego desconecte la conexión
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
| Attack Vector | NETWORK |
|---|---|
| Attack Complexity | LOW |
| Privileges Required | NONE |
| User Interaction | NONE |
| Scope | UNCHANGED |
| Confidentiality Impact | NONE |
| Integrity Impact | NONE |
| Availability Impact | HIGH |
AV:N/AC:L/Au:N/C:N/I:N/A:P
| Access Vector | NETWORK |
|---|---|
| Access Complexity | LOW |
| Authentication | NONE |
| Confidentiality Impact | NONE |
| Integrity Impact | NONE |
| Availability Impact | PARTIAL |
| Source | Type | Description |
|---|---|---|
| [email protected] | Secondary |
en
CWE-707
|
| [email protected] | Primary |
en
CWE-400
|
| Vendor | Product | Version | Update | Type |
|---|---|---|---|---|
| nghttp2 | nghttp2 | * | <built-in method update of dict object at 0x72a9b0d8e100> | Application |
| debian | debian_linux | 9.0 | <built-in method update of dict object at 0x72a9b0d8cf00> | Operating System |
| debian | debian_linux | 10.0 | <built-in method update of dict object at 0x72a9b0d8f940> | Operating System |
| opensuse | leap | 15.1 | <built-in method update of dict object at 0x72a9b0d8f240> | Operating System |
| fedoraproject | fedora | 31 | <built-in method update of dict object at 0x72a9b0d8c6c0> | Operating System |
| fedoraproject | fedora | 33 | <built-in method update of dict object at 0x72a9b0d8d440> | Operating System |
| oracle | banking_extensibility_workbench | 14.3.0 | <built-in method update of dict object at 0x72a9b0a80980> | Application |
| oracle | banking_extensibility_workbench | 14.4.0 | <built-in method update of dict object at 0x72a9b0d8fd00> | Application |
| oracle | blockchain_platform | * | <built-in method update of dict object at 0x72a9b0d8fd80> | Application |
| oracle | enterprise_communications_broker | 3.1.0 | <built-in method update of dict object at 0x72a9b0d8f000> | Application |
| oracle | enterprise_communications_broker | 3.2.0 | <built-in method update of dict object at 0x72a9b0d8cb00> | Application |
| oracle | graalvm | 19.3.2 | <built-in method update of dict object at 0x72a9b0d8f1c0> | Application |
| oracle | graalvm | 20.1.0 | <built-in method update of dict object at 0x72a9b0d8df00> | Application |
| oracle | mysql | * | <built-in method update of dict object at 0x72a9cc7500c0> | Application |
| oracle | mysql | * | <built-in method update of dict object at 0x72a9cc747740> | Application |
| oracle | mysql | * | <built-in method update of dict object at 0x72a9b0d8fb80> | Application |
| oracle | mysql | * | <built-in method update of dict object at 0x72a9b0d8d340> | Application |
| oracle | mysql | * | <built-in method update of dict object at 0x72a9b0d8e5c0> | Application |
| nodejs | node.js | * | <built-in method update of dict object at 0x72a9b0d8f700> | Application |
| nodejs | node.js | * | <built-in method update of dict object at 0x72a9b0d8d740> | Application |
| nodejs | node.js | * | <built-in method update of dict object at 0x72a9cc744040> | Application |
| nodejs | node.js | * | <built-in method update of dict object at 0x72a9b0d8ccc0> | Application |
| nodejs | node.js | * | <built-in method update of dict object at 0x72a9b0a83d40> | Application |
| Vulnerable | CPE |
|---|---|
| Yes | cpe:2.3:a:nghttp2:nghttp2:*:*:*:*:*:*:*:* |
| Vulnerable | CPE |
|---|---|
| Yes | cpe:2.3:o:debian:debian_linux:9.0:*:*:*:*:*:*:* |
| Yes | cpe:2.3:o:debian:debian_linux:10.0:*:*:*:*:*:*:* |
| Vulnerable | CPE |
|---|---|
| Yes | cpe:2.3:o:opensuse:leap:15.1:*:*:*:*:*:*:* |
| Vulnerable | CPE |
|---|---|
| Yes | cpe:2.3:o:fedoraproject:fedora:31:*:*:*:*:*:*:* |
| Yes | cpe:2.3:o:fedoraproject:fedora:33:*:*:*:*:*:*:* |
| Vulnerable | CPE |
|---|---|
| Yes | cpe:2.3:a:oracle:banking_extensibility_workbench:14.3.0:*:*:*:*:*:*:* |
| Yes | cpe:2.3:a:oracle:banking_extensibility_workbench:14.4.0:*:*:*:*:*:*:* |
| Yes | cpe:2.3:a:oracle:blockchain_platform:*:*:*:*:*:*:*:* |
| Yes | cpe:2.3:a:oracle:enterprise_communications_broker:3.1.0:*:*:*:*:*:*:* |
| Yes | cpe:2.3:a:oracle:enterprise_communications_broker:3.2.0:*:*:*:*:*:*:* |
| Yes | cpe:2.3:a:oracle:graalvm:19.3.2:*:*:*:enterprise:*:*:* |
| Yes | cpe:2.3:a:oracle:graalvm:20.1.0:*:*:*:enterprise:*:*:* |
| Yes | cpe:2.3:a:oracle:mysql:*:*:*:*:*:*:*:* |
| Yes | cpe:2.3:a:oracle:mysql:*:*:*:*:*:*:*:* |
| Yes | cpe:2.3:a:oracle:mysql:*:*:*:*:*:*:*:* |
| Yes | cpe:2.3:a:oracle:mysql:*:*:*:*:*:*:*:* |
| Yes | cpe:2.3:a:oracle:mysql:*:*:*:*:*:*:*:* |
| Vulnerable | CPE |
|---|---|
| Yes | cpe:2.3:a:nodejs:node.js:*:*:*:*:-:*:*:* |
| Yes | cpe:2.3:a:nodejs:node.js:*:*:*:*:lts:*:*:* |
| Yes | cpe:2.3:a:nodejs:node.js:*:*:*:*:-:*:*:* |
| Yes | cpe:2.3:a:nodejs:node.js:*:*:*:*:lts:*:*:* |
| Yes | cpe:2.3:a:nodejs:node.js:*:*:*:*:-:*:*:* |