{
    "document": {
        "category": "csaf_base",
        "csaf_version": "2.0",
        "distribution": {
            "tlp": {
                "label": "WHITE"
            }
        },
        "lang": "en",
        "notes": [
            {
                "category": "legal_disclaimer",
                "text": "The Netherlands Cyber Security Center (henceforth: NCSC-NL) maintains this portal to enhance access to its information and vulnerabilities. The use of this information is subject to the following terms and conditions:\n\nThe vulnerabilities disclosed in this portal are gathered by NCSC-NL from a variety of open sources, which the user can retrieve from other platforms. NCSC-NL makes every reasonable effort to ensure that the content of this portal is kept up to date, and that it is accurate and complete. Nevertheless, NCSC-NL cannot entirely rule out the possibility of errors, and therefore cannot give any warranty in respect of its completeness, accuracy or real-time keeping up-to-date. NCSC-NL does not control nor guarantee the accuracy, relevance, timeliness or completeness of information obtained from these external sources. The vulnerabilities disclosed in this portal are intended solely for the convenience of professional parties to take appropriate measures to manage the risks posed to the cybersecurity. No rights can be derived from the information provided therein.\n\nNCSC-NL and the Kingdom of the Netherlands assume no legal liability or responsibility for any damage resulting from either the use or inability of use of the vulnerabilities disclosed in this portal. This includes damage resulting from the inaccuracy of incompleteness of the information contained in it.\nThe information on this page is subject to Dutch law. All disputes related to or arising from the use of this portal regarding the disclosure of vulnerabilities will be submitted to the competent court in The Hague. This choice of means also applies to the court in summary proceedings."
            }
        ],
        "publisher": {
            "category": "coordinator",
            "contact_details": "cert@ncsc.nl",
            "name": "National Cyber Security Centre",
            "namespace": "https://www.ncsc.nl/"
        },
        "title": "CVE-2026-101898",
        "tracking": {
            "current_release_date": "2026-10-21T10:08:28.797667Z",
            "generator": {
                "date": "2026-02-17T15:00:00Z",
                "engine": {
                    "name": "V.E.L.M.A",
                    "version": "1.7"
                }
            },
            "id": "CVE-2026-101898",
            "initial_release_date": "2026-09-28T17:38:35.340804Z",
            "revision_history": [
                {
                    "date": "2026-09-28T17:38:35.340804Z",
                    "number": "1",
                    "summary": "CVSS created.| CWES created (1).| Products created (1).| References created (4).| Description created for source.| Unknown change."
                },
                {
                    "date": "2026-09-28T17:38:36.556344Z",
                    "number": "2",
                    "summary": "NCSC Score created."
                },
                {
                    "date": "2026-09-28T18:28:19.372966Z",
                    "number": "3",
                    "summary": "Source created.| CVE status created. (valid)| Description created for source.| CVSS created.| References created (4).| CWES updated (1)."
                },
                {
                    "date": "2026-09-28T18:28:29.731573Z",
                    "number": "4",
                    "summary": "NCSC Score updated."
                },
                {
                    "date": "2026-09-28T18:38:41.249189Z",
                    "number": "5",
                    "summary": "Unknown change."
                },
                {
                    "date": "2026-09-28T23:29:04.441458Z",
                    "number": "6",
                    "summary": "NCSC Score updated."
                },
                {
                    "date": "2026-09-29T06:13:17.413277Z",
                    "number": "7",
                    "summary": "Source created.| CVE status created. (valid)| Description created for source.| CVSS created.| Products connected (17).| References created (6).| CWES updated (1)."
                },
                {
                    "date": "2026-09-29T06:13:20.087613Z",
                    "number": "8",
                    "summary": "NCSC Score updated."
                },
                {
                    "date": "2026-09-29T12:29:24.731378Z",
                    "number": "9",
                    "summary": "Source created.| CVE status created. (valid)| Description created for source.| CVSS created.| Products connected (5).| Product Identifiers created (1).| References created (6).| CWES updated (1).| Vendor_assessment created."
                },
                {
                    "date": "2026-09-29T12:29:28.081962Z",
                    "number": "10",
                    "summary": "NCSC Score updated."
                },
                {
                    "date": "2026-09-29T12:53:01.858226Z",
                    "number": "11",
                    "summary": "Source created.| CVE status created. (valid)| Description created for source.| Products connected (1)."
                },
                {
                    "date": "2026-09-29T12:53:21.586544Z",
                    "number": "12",
                    "summary": "NCSC Score updated."
                },
                {
                    "date": "2026-09-29T16:12:57.564993Z",
                    "number": "13",
                    "summary": "EPSS created.| Unknown change."
                },
                {
                    "date": "2026-09-29T16:13:03.052139Z",
                    "number": "14",
                    "summary": "NCSC Score updated."
                },
                {
                    "date": "2026-09-30T15:40:03.912119Z",
                    "number": "15",
                    "summary": "Source created.| CVE status created. (valid)| Description created for source.| CVSS created.| References created (6).| CWES updated (1)."
                },
                {
                    "date": "2026-09-30T15:40:12.554589Z",
                    "number": "16",
                    "summary": "NCSC Score updated."
                },
                {
                    "date": "2026-10-05T06:44:21.405613Z",
                    "number": "17",
                    "summary": "Products connected (1).| Products removed (1)."
                },
                {
                    "date": "2026-10-05T06:44:30.819550Z",
                    "number": "18",
                    "summary": "NCSC Score updated."
                },
                {
                    "date": "2026-10-21T10:05:48.745149Z",
                    "number": "19",
                    "summary": "Source created.| CVE status created. (valid)| Products created (9).| Products connected (3).| References created (3)."
                },
                {
                    "date": "2026-10-21T10:05:54.925610Z",
                    "number": "20",
                    "summary": "NCSC Score updated."
                }
            ],
            "status": "interim",
            "version": "20"
        }
    },
    "product_tree": {
        "branches": [
            {
                "branches": [
                    {
                        "branches": [
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/>=1.13.0|<1.20.0",
                                "product": {
                                    "name": "vers:unknown/>=1.13.0|<1.20.0",
                                    "product_id": "CSAFPID-9482815"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.13.0",
                                "product": {
                                    "name": "vers:unknown/v1.13.0",
                                    "product_id": "CSAFPID-5588486"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.13.1",
                                "product": {
                                    "name": "vers:unknown/v1.13.1",
                                    "product_id": "CSAFPID-5588487"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.13.2",
                                "product": {
                                    "name": "vers:unknown/v1.13.2",
                                    "product_id": "CSAFPID-5588488"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.13.3",
                                "product": {
                                    "name": "vers:unknown/v1.13.3",
                                    "product_id": "CSAFPID-5588489"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.13.4",
                                "product": {
                                    "name": "vers:unknown/v1.13.4",
                                    "product_id": "CSAFPID-5588490"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.13.5",
                                "product": {
                                    "name": "vers:unknown/v1.13.5",
                                    "product_id": "CSAFPID-8580145"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.13.6",
                                "product": {
                                    "name": "vers:unknown/v1.13.6",
                                    "product_id": "CSAFPID-8580144"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.14.0",
                                "product": {
                                    "name": "vers:unknown/v1.14.0",
                                    "product_id": "CSAFPID-8580143"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.15.0",
                                "product": {
                                    "name": "vers:unknown/v1.15.0",
                                    "product_id": "CSAFPID-8580142"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.15.1",
                                "product": {
                                    "name": "vers:unknown/v1.15.1",
                                    "product_id": "CSAFPID-8580141"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.15.2",
                                "product": {
                                    "name": "vers:unknown/v1.15.2",
                                    "product_id": "CSAFPID-8583063"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.16.0",
                                "product": {
                                    "name": "vers:unknown/v1.16.0",
                                    "product_id": "CSAFPID-8925641"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.16.1",
                                "product": {
                                    "name": "vers:unknown/v1.16.1",
                                    "product_id": "CSAFPID-8925639"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.17.0",
                                "product": {
                                    "name": "vers:unknown/v1.17.0",
                                    "product_id": "CSAFPID-8925638"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.18.0",
                                "product": {
                                    "name": "vers:unknown/v1.18.0",
                                    "product_id": "CSAFPID-9484963"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.18.1",
                                "product": {
                                    "name": "vers:unknown/v1.18.1",
                                    "product_id": "CSAFPID-9484962"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/v1.19.0",
                                "product": {
                                    "name": "vers:unknown/v1.19.0",
                                    "product_id": "CSAFPID-9484961"
                                }
                            }
                        ],
                        "category": "product_name",
                        "name": "Axios"
                    }
                ],
                "category": "vendor",
                "name": "Axios"
            },
            {
                "branches": [
                    {
                        "branches": [
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/lts <10.2.24",
                                "product": {
                                    "name": "vers:unknown/lts <10.2.24",
                                    "product_id": "CSAFPID-9773074"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/lts <12.1.12",
                                "product": {
                                    "name": "vers:unknown/lts <12.1.12",
                                    "product_id": "CSAFPID-9773077"
                                }
                            }
                        ],
                        "category": "product_name",
                        "name": "Bamboo"
                    },
                    {
                        "branches": [
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/<10.5.1",
                                "product": {
                                    "name": "vers:unknown/<10.5.1",
                                    "product_id": "CSAFPID-9527307"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/lts <10.2.8",
                                "product": {
                                    "name": "vers:unknown/lts <10.2.8",
                                    "product_id": "CSAFPID-9773075"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/lts <9.4.26",
                                "product": {
                                    "name": "vers:unknown/lts <9.4.26",
                                    "product_id": "CSAFPID-9773079"
                                }
                            }
                        ],
                        "category": "product_name",
                        "name": "Bitbucket"
                    },
                    {
                        "branches": [
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/<11.0.0",
                                "product": {
                                    "name": "vers:unknown/<11.0.0",
                                    "product_id": "CSAFPID-9773080"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/lts <10.2.19",
                                "product": {
                                    "name": "vers:unknown/lts <10.2.19",
                                    "product_id": "CSAFPID-9773081"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/lts <9.2.26",
                                "product": {
                                    "name": "vers:unknown/lts <9.2.26",
                                    "product_id": "CSAFPID-9773082"
                                }
                            }
                        ],
                        "category": "product_name",
                        "name": "Confluence"
                    },
                    {
                        "branches": [
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/<4.9.15",
                                "product": {
                                    "name": "vers:unknown/<4.9.15",
                                    "product_id": "CSAFPID-9527315"
                                }
                            }
                        ],
                        "category": "product_name",
                        "name": "Crucible"
                    },
                    {
                        "branches": [
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/<4.9.15",
                                "product": {
                                    "name": "vers:unknown/<4.9.15",
                                    "product_id": "CSAFPID-9527321"
                                }
                            }
                        ],
                        "category": "product_name",
                        "name": "Fisheye"
                    },
                    {
                        "branches": [
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/lts <10.3.26",
                                "product": {
                                    "name": "vers:unknown/lts <10.3.26",
                                    "product_id": "CSAFPID-9773078"
                                }
                            },
                            {
                                "category": "product_version_range",
                                "name": "vers:unknown/lts <11.3.12",
                                "product": {
                                    "name": "vers:unknown/lts <11.3.12",
                                    "product_id": "CSAFPID-9773076"
                                }
                            }
                        ],
                        "category": "product_name",
                        "name": "Jira"
                    }
                ],
                "category": "vendor",
                "name": "Atlassian"
            },
            {
                "branches": [
                    {
                        "branches": [
                            {
                                "category": "product_version_range",
                                "name": "vers:rpm/1",
                                "product": {
                                    "name": "vers:rpm/1",
                                    "product_id": "CSAFPID-6014972",
                                    "product_identification_helper": {
                                        "cpe": "cpe:/a:redhat:hummingbird:1"
                                    }
                                }
                            }
                        ],
                        "category": "product_name",
                        "name": "Red Hat Hardened Images"
                    },
                    {
                        "branches": [
                            {
                                "branches": [
                                    {
                                        "category": "product_version_range",
                                        "name": "vers:rpm/unknown",
                                        "product": {
                                            "name": "vers:rpm/unknown",
                                            "product_id": "CSAFPID-8902830"
                                        }
                                    }
                                ],
                                "category": "product_name",
                                "name": "grafana12.4"
                            },
                            {
                                "branches": [
                                    {
                                        "category": "product_version_range",
                                        "name": "vers:rpm/unknown",
                                        "product": {
                                            "name": "vers:rpm/unknown",
                                            "product_id": "CSAFPID-8902831"
                                        }
                                    }
                                ],
                                "category": "product_name",
                                "name": "grafana13.1"
                            },
                            {
                                "branches": [
                                    {
                                        "category": "product_version_range",
                                        "name": "vers:rpm/unknown",
                                        "product": {
                                            "name": "vers:rpm/unknown",
                                            "product_id": "CSAFPID-9053231"
                                        }
                                    }
                                ],
                                "category": "product_name",
                                "name": "grafana13.2"
                            },
                            {
                                "branches": [
                                    {
                                        "category": "product_version_range",
                                        "name": "vers:rpm/unknown",
                                        "product": {
                                            "name": "vers:rpm/unknown",
                                            "product_id": "CSAFPID-8476867"
                                        }
                                    }
                                ],
                                "category": "product_name",
                                "name": "jaeger"
                            }
                        ],
                        "category": "product_family",
                        "name": "Red Hat Hardened Images"
                    }
                ],
                "category": "vendor",
                "name": "Red Hat"
            },
            {
                "branches": [
                    {
                        "branches": [
                            {
                                "branches": [
                                    {
                                        "category": "product_version_range",
                                        "name": "vers:deb/*",
                                        "product": {
                                            "name": "vers:deb/*",
                                            "product_id": "CSAFPID-1409455"
                                        }
                                    }
                                ],
                                "category": "product_name",
                                "name": "node-axios"
                            }
                        ],
                        "category": "product_family",
                        "name": "bookworm"
                    }
                ],
                "category": "vendor",
                "name": "Debian"
            }
        ]
    },
    "vulnerabilities": [
        {
            "cve": "CVE-2026-101898",
            "cwe": {
                "id": "CWE-918",
                "name": "Server-Side Request Forgery (SSRF)"
            },
            "notes": [
                {
                    "category": "description",
                    "text": "Axios is a promise-based HTTP client for the browser and Node.js. From 1.13.0 until 1.20.0, Axios HTTP/2 request setup does not consistently apply proxy settings and caller-supplied DNS lookup policy. An HTTPS request uses httpVersion: 2 with explicit config.proxy or environment-derived proxy settings, or relies on caller-supplied config.lookup DNS policy. The HTTP/2 path can connect without the configured proxy behavior or without applying the caller-supplied config.lookup policy before http2.connect(). Requests can bypass the intended proxy route or the caller-supplied DNS resolution policy. This issue is fixed in version 1.20.0.",
                    "title": "cveprojectv5 - https://www.cve.org/CVERecord?id=CVE-2026-101898"
                },
                {
                    "category": "description",
                    "text": "Axios is a promise-based HTTP client for the browser and Node.js. From 1.13.0 until 1.20.0, Axios HTTP/2 request setup does not consistently apply proxy settings and caller-supplied DNS lookup policy. An HTTPS request uses httpVersion: 2 with explicit config.proxy or environment-derived proxy settings, or relies on caller-supplied config.lookup DNS policy. The HTTP/2 path can connect without the configured proxy behavior or without applying the caller-supplied config.lookup policy before http2.connect(). Requests can bypass the intended proxy route or the caller-supplied DNS resolution policy. This issue is fixed in version 1.20.0.",
                    "title": "nvd - https://nvd.nist.gov/vuln/detail/CVE-2026-101898"
                },
                {
                    "category": "description",
                    "text": "A flaw was found in axios. When processing HTTP/2 requests, the client fails to enforce configured proxy settings and custom Domain Name System (DNS) resolution policies. A remote attacker who can influence destination URLs could exploit this vulnerability to bypass outbound network restrictions, potentially leading to Server-Side Request Forgery (SSRF). This may allow unauthorized communication with internal network services or cloud metadata endpoints that should otherwise be blocked.",
                    "title": "redhat - https://access.redhat.com/security/cve/CVE-2026-101898"
                },
                {
                    "category": "description",
                    "text": "Axios is a promise-based HTTP client for the browser and Node.js. From 1.13.0 until 1.20.0, Axios HTTP/2 request setup does not consistently apply proxy settings and caller-supplied DNS lookup policy. An HTTPS request uses httpVersion: 2 with explicit config.proxy or environment-derived proxy settings, or relies on caller-supplied config.lookup DNS policy. The HTTP/2 path can connect without the configured proxy behavior or without applying the caller-supplied config.lookup policy before http2.connect(). Requests can bypass the intended proxy route or the caller-supplied DNS resolution policy. This issue is fixed in version 1.20.0.",
                    "title": "debian - https://security-tracker.debian.org/tracker/CVE-2026-101898"
                },
                {
                    "category": "description",
                    "text": "Axios is a promise-based HTTP client for the browser and Node.js. From 1.13.0 until 1.20.0, Axios HTTP/2 request setup does not consistently apply proxy settings and caller-supplied DNS lookup policy. An HTTPS request uses httpVersion: 2 with explicit config.proxy or environment-derived proxy settings, or relies on caller-supplied config.lookup DNS policy. The HTTP/2 path can connect without the configured proxy behavior or without applying the caller-supplied config.lookup policy before http2.connect(). Requests can bypass the intended proxy route or the caller-supplied DNS resolution policy. This issue is fixed in version 1.20.0.",
                    "title": "osvgit - https://www.googleapis.com/download/storage/v1/b/osv-vulnerabilities/o/GIT%2FCVE-2026-101898.json?alt=media"
                },
                {
                    "category": "description",
                    "text": "## Summary\n\nAxios for Node.js does not apply configured DNS lookup or proxy controls when a request uses `httpVersion: 2`. The HTTP/1 adapter path wraps and forwards `config.lookup`, builds normal request options, and applies proxy routing through `setProxy()`. The HTTP/2 path builds a session with `http2.connect()` using only `options.http2Options`, which drops the top-level `lookup`, `agent`, and proxy state.\n\nApplications are affected when they allow a user to influence request destinations, enable axios HTTP/2, and rely on axios `lookup` or proxy routing to prevent SSRF or enforce outbound network policy.\n\n## Impact\n\nIn affected server-side deployments, an attacker can cause axios to connect directly to destinations that the configured resolver or proxy would have rejected. Depending on reachable services, this can expose cloud metadata, internal service responses, or allow state-changing requests to internal systems.\n\nThis is not an unconditional SSRF in every axios deployment. It requires `httpVersion: 2` and an application-level trust boundary where user-influenced URLs are constrained by `lookup` or proxy policy.\n\n## Affected Functionality\n\nAffected:\n\n- Node.js HTTP adapter with `httpVersion: 2`.\n- `config.lookup` supplied as a DNS policy.\n- Explicit `config.proxy` and environment-derived proxy settings for HTTPS HTTP/2 requests.\n\nNot affected:\n\n- Browser adapters.\n- Node HTTP/1 requests, which pass `lookup` to the transport and apply proxy handling.\n- Applications that validate destination hosts independently before calling axios.\n\n## Technical Details\n\nIn `lib/adapters/http.js`, the adapter reads `lookup`, wraps it, stores it on the request `options`, and applies `setProxy()` before selecting a transport. For HTTP/2, `http2Transport.request()` builds an authority from `options.protocol`, `options.hostname`, and `options.port`, then calls:\n\n```js\nconst { http2Options, headers } = options;\nconst session = http2Sessions.getSession(authority, http2Options);\n```\n\n`lib/helpers/Http2Sessions.js` ultimately calls `http2.connect(authority, options)` with only the `http2Options` object. The configured DNS lookup and the proxy or tunneling agent installed on the top-level request options are not forwarded into that call.\n\nLocal verification on axios `1.18.1` showed `lookupCalls: 0` while an HTTP/2 request to a local h2 origin succeeded. A second local HTTPS h2 verification with an explicit rejecting HTTP proxy showed the origin received the request and the proxy observed no traffic.\n\n## Proof of Concept of Attack\n\nLocal constrained demonstration:\n\n1. Start an HTTP/2 server on loopback.\n2. Call `axios.get(\"http://localhost:<port>/internal\", { httpVersion: 2, lookup })` where `lookup` throws `EPOLICY`.\n3. Observe that the request succeeds and the lookup counter remains `0`.\n\nFor proxy routing:\n\n1. Start an HTTPS HTTP/2 origin and a local HTTP proxy that rejects every request and CONNECT.\n2. Call axios with `httpVersion: 2`, `http2Options: { rejectUnauthorized: false }`, and explicit `proxy`.\n3. Observe that the origin receives the request and the proxy receives nothing.\n\nExpected safe behavior is that either the lookup policy blocks the request or the proxy observes and rejects the request.\n\n## Workarounds\n\nUse the HTTP/1 adapter path for requests that depend on axios `lookup` or proxy controls. Alternatively, enforce destination allow/deny policy before calling axios, outside the adapter transport path.\n\n<details>\n  <summary><h3>Original report</h3></summary>\n  \n  ### Summary\n\nI found that Axios does not apply the configured `lookup` function or proxy when a request uses `httpVersion: 2`. The HTTP/1 adapter applies both controls, but the HTTP/2 path connects straight to the URL's hostname using `http2.connect()`.\n\nThis matters for server applications that accept a user-influenced URL and use a custom DNS lookup or mandatory outbound proxy to prevent SSRF. Switching the Axios instance to HTTP/2 silently removes those controls, allowing the request to reach an address the application intended to block.\n\nI reproduced this on the current npm release, Axios 1.18.1.\n\n### Details\n\nThe HTTP adapter reads and wraps the caller's `lookup` function, builds the normal request options, and calls `setProxy()`:\n\n- `lib/adapters/http.js`, around lines 530-578: reads and wraps `lookup`\n- `lib/adapters/http.js`, around lines 895-954: adds `lookup` to `options` and applies `setProxy()`\n\nFor HTTP/2, however, the adapter selects `http2Transport`. That transport creates an authority from the destination and only passes `options.http2Options` to the session pool:\n\n```js\nconst { http2Options, headers } = options;\nconst session = http2Sessions.getSession(authority, http2Options);\n```\n\n`lib/helpers/Http2Sessions.js` then calls:\n\n```js\nconst session = http2.connect(authority, options);\n```\n\nAt this point `options` is only the `http2Options` object. The top-level `lookup`, the proxy tunnelling agent created by `setProxy()`, and the selected `httpAgent`/`httpsAgent` are not forwarded. The request therefore uses the system resolver and opens a direct connection to the origin.\n\nThe same root cause affects both explicit proxy configuration and environment-derived proxy configuration. I kept the PoC local and used an explicit proxy so the result does not depend on shell environment variables.\n\n### PoC\n\nI attached [axios_http2_transport_controls_poc.mjs](https://drive.google.com/file/d/1lKXBOLDoysOFRmaRyV1tMVLx3P0Ah4gV/view?usp=sharing). The PoC is entirely local and sets up three pieces:\n\n1. An HTTPS origin with HTTP/2 enabled. If reached, it records the request and returns `REACHED_BLOCKED_ORIGIN`.\n2. An HTTP proxy that records traffic but rejects every normal request and every CONNECT request with `502 Bad Gateway`.\n3. A custom Axios `lookup` callback that rejects every DNS lookup with an `EPOLICY` error.\n\nThe first request is an HTTP/1 control request. It uses the blocking `lookup` callback and has proxying disabled. Axios calls the callback, receives `EPOLICY`, and does not reach the origin. This confirms that the callback works and that the hostname is blocked through the normal adapter path.\n\nThe second request targets the same URL with `httpVersion: 2`. It is given both security controls: the same blocking `lookup` callback and the rejecting proxy. If Axios honors either one, this request cannot reach the origin. It should fail with `EPOLICY`, or it should reach the proxy and receive its `502` response.\n\nInstead, the request returns HTTP 200 with `REACHED_BLOCKED_ORIGIN`. The lookup counter does not increase, and the proxy records no request or CONNECT attempt. The origin is the only server that records traffic. This shows that the HTTP/2 path skipped both controls and connected directly using the system resolver.\n\nTo reproduce, run the attachment from the root of an Axios checkout:\n\nRun it from the root of an Axios checkout:\n\n```bash\ngit checkout v1.18.1\nnpm install --ignore-scripts\nnode /path/to/axios_http2_transport_controls_poc.mjs\n```\n\nRelevant output from my run:\n\n```json\n{\n  \"axiosVersion\": \"1.18.1\",\n  \"configuredControls\": {\n    \"lookup\": \"reject every DNS lookup with EPOLICY\",\n    \"proxy\": \"http://127.0.0.1:<port> (reject every request)\"\n  },\n  \"http1Control\": \"EPOLICY: blocked by application DNS policy\",\n  \"http2Result\": {\n    \"status\": 200,\n    \"data\": \"REACHED_BLOCKED_ORIGIN\"\n  },\n  \"lookupCalls\": 1,\n  \"proxyObservedTraffic\": false,\n  \"events\": [\n    {\n      \"server\": \"origin\",\n      \"protocol\": \"h2\",\n      \"path\": \"/internal\"\n    }\n  ]\n}\n```\n\nThe important parts of the output are:\n\n- `http1Control` contains `EPOLICY`, proving the DNS policy blocks the destination under HTTP/1.\n- `lookupCalls` is still `1` after both requests, proving HTTP/2 never called the configured resolver.\n- `proxyObservedTraffic` is `false`, proving HTTP/2 did not use the configured proxy.\n- `http2Result.status` is `200`, and the sole event belongs to the origin, proving Axios connected directly to the blocked destination.\n\n### Impact\n\nThe vulnerable configuration is a Node.js application that:\n\n- enables Axios HTTP/2 using `httpVersion: 2`;\n- lets an application user influence the request destination; and\n- relies on Axios's `lookup` option or proxy routing to enforce a destination or egress policy.\n\nIn that setup, an unauthenticated application user may be able to make the server connect directly to loopback, private-network, or link-local services that the lookup policy or proxy would have rejected. Depending on the reachable service, this can expose cloud credentials or internal data, modify internal services, or affect availability.\n\nHTTP/2 support is marked experimental, but neither the HTTP/2 documentation nor the proxy documentation says that `lookup` and proxy controls are ignored. The proxy documentation states that HTTPS requests are sent through a CONNECT tunnel. More importantly, Axios's threat model tells callers that destination validation is their responsibility; this behavior silently bypasses such caller-supplied validation.\n\nI did not test against any third-party or production service. The PoC only uses listeners on my own machine.\n</details>\n\n---",
                    "title": "osvnpm - https://www.googleapis.com/download/storage/v1/b/osv-vulnerabilities/o/npm%2FGHSA-3pq3-5fj3-cg6v.json?alt=media"
                },
                {
                    "category": "description",
                    "text": "## Summary\n\nAxios for Node.js does not apply configured DNS lookup or proxy controls when a request uses `httpVersion: 2`. The HTTP/1 adapter path wraps and forwards `config.lookup`, builds normal request options, and applies proxy routing through `setProxy()`. The HTTP/2 path builds a session with `http2.connect()` using only `options.http2Options`, which drops the top-level `lookup`, `agent`, and proxy state.\n\nApplications are affected when they allow a user to influence request destinations, enable axios HTTP/2, and rely on axios `lookup` or proxy routing to prevent SSRF or enforce outbound network policy.\n\n## Impact\n\nIn affected server-side deployments, an attacker can cause axios to connect directly to destinations that the configured resolver or proxy would have rejected. Depending on reachable services, this can expose cloud metadata, internal service responses, or allow state-changing requests to internal systems.\n\nThis is not an unconditional SSRF in every axios deployment. It requires `httpVersion: 2` and an application-level trust boundary where user-influenced URLs are constrained by `lookup` or proxy policy.\n\n## Affected Functionality\n\nAffected:\n\n- Node.js HTTP adapter with `httpVersion: 2`.\n- `config.lookup` supplied as a DNS policy.\n- Explicit `config.proxy` and environment-derived proxy settings for HTTPS HTTP/2 requests.\n\nNot affected:\n\n- Browser adapters.\n- Node HTTP/1 requests, which pass `lookup` to the transport and apply proxy handling.\n- Applications that validate destination hosts independently before calling axios.\n\n## Technical Details\n\nIn `lib/adapters/http.js`, the adapter reads `lookup`, wraps it, stores it on the request `options`, and applies `setProxy()` before selecting a transport. For HTTP/2, `http2Transport.request()` builds an authority from `options.protocol`, `options.hostname`, and `options.port`, then calls:\n\n```js\nconst { http2Options, headers } = options;\nconst session = http2Sessions.getSession(authority, http2Options);\n```\n\n`lib/helpers/Http2Sessions.js` ultimately calls `http2.connect(authority, options)` with only the `http2Options` object. The configured DNS lookup and the proxy or tunneling agent installed on the top-level request options are not forwarded into that call.\n\nLocal verification on axios `1.18.1` showed `lookupCalls: 0` while an HTTP/2 request to a local h2 origin succeeded. A second local HTTPS h2 verification with an explicit rejecting HTTP proxy showed the origin received the request and the proxy observed no traffic.\n\n## Proof of Concept of Attack\n\nLocal constrained demonstration:\n\n1. Start an HTTP/2 server on loopback.\n2. Call `axios.get(\"http://localhost:<port>/internal\", { httpVersion: 2, lookup })` where `lookup` throws `EPOLICY`.\n3. Observe that the request succeeds and the lookup counter remains `0`.\n\nFor proxy routing:\n\n1. Start an HTTPS HTTP/2 origin and a local HTTP proxy that rejects every request and CONNECT.\n2. Call axios with `httpVersion: 2`, `http2Options: { rejectUnauthorized: false }`, and explicit `proxy`.\n3. Observe that the origin receives the request and the proxy receives nothing.\n\nExpected safe behavior is that either the lookup policy blocks the request or the proxy observes and rejects the request.\n\n## Workarounds\n\nUse the HTTP/1 adapter path for requests that depend on axios `lookup` or proxy controls. Alternatively, enforce destination allow/deny policy before calling axios, outside the adapter transport path.\n\n<details>\n  <summary><h3>Original report</h3></summary>\n  \n  ### Summary\n\nI found that Axios does not apply the configured `lookup` function or proxy when a request uses `httpVersion: 2`. The HTTP/1 adapter applies both controls, but the HTTP/2 path connects straight to the URL's hostname using `http2.connect()`.\n\nThis matters for server applications that accept a user-influenced URL and use a custom DNS lookup or mandatory outbound proxy to prevent SSRF. Switching the Axios instance to HTTP/2 silently removes those controls, allowing the request to reach an address the application intended to block.\n\nI reproduced this on the current npm release, Axios 1.18.1.\n\n### Details\n\nThe HTTP adapter reads and wraps the caller's `lookup` function, builds the normal request options, and calls `setProxy()`:\n\n- `lib/adapters/http.js`, around lines 530-578: reads and wraps `lookup`\n- `lib/adapters/http.js`, around lines 895-954: adds `lookup` to `options` and applies `setProxy()`\n\nFor HTTP/2, however, the adapter selects `http2Transport`. That transport creates an authority from the destination and only passes `options.http2Options` to the session pool:\n\n```js\nconst { http2Options, headers } = options;\nconst session = http2Sessions.getSession(authority, http2Options);\n```\n\n`lib/helpers/Http2Sessions.js` then calls:\n\n```js\nconst session = http2.connect(authority, options);\n```\n\nAt this point `options` is only the `http2Options` object. The top-level `lookup`, the proxy tunnelling agent created by `setProxy()`, and the selected `httpAgent`/`httpsAgent` are not forwarded. The request therefore uses the system resolver and opens a direct connection to the origin.\n\nThe same root cause affects both explicit proxy configuration and environment-derived proxy configuration. I kept the PoC local and used an explicit proxy so the result does not depend on shell environment variables.\n\n### PoC\n\nI attached [axios_http2_transport_controls_poc.mjs](https://drive.google.com/file/d/1lKXBOLDoysOFRmaRyV1tMVLx3P0Ah4gV/view?usp=sharing). The PoC is entirely local and sets up three pieces:\n\n1. An HTTPS origin with HTTP/2 enabled. If reached, it records the request and returns `REACHED_BLOCKED_ORIGIN`.\n2. An HTTP proxy that records traffic but rejects every normal request and every CONNECT request with `502 Bad Gateway`.\n3. A custom Axios `lookup` callback that rejects every DNS lookup with an `EPOLICY` error.\n\nThe first request is an HTTP/1 control request. It uses the blocking `lookup` callback and has proxying disabled. Axios calls the callback, receives `EPOLICY`, and does not reach the origin. This confirms that the callback works and that the hostname is blocked through the normal adapter path.\n\nThe second request targets the same URL with `httpVersion: 2`. It is given both security controls: the same blocking `lookup` callback and the rejecting proxy. If Axios honors either one, this request cannot reach the origin. It should fail with `EPOLICY`, or it should reach the proxy and receive its `502` response.\n\nInstead, the request returns HTTP 200 with `REACHED_BLOCKED_ORIGIN`. The lookup counter does not increase, and the proxy records no request or CONNECT attempt. The origin is the only server that records traffic. This shows that the HTTP/2 path skipped both controls and connected directly using the system resolver.\n\nTo reproduce, run the attachment from the root of an Axios checkout:\n\nRun it from the root of an Axios checkout:\n\n```bash\ngit checkout v1.18.1\nnpm install --ignore-scripts\nnode /path/to/axios_http2_transport_controls_poc.mjs\n```\n\nRelevant output from my run:\n\n```json\n{\n  \"axiosVersion\": \"1.18.1\",\n  \"configuredControls\": {\n    \"lookup\": \"reject every DNS lookup with EPOLICY\",\n    \"proxy\": \"http://127.0.0.1:<port> (reject every request)\"\n  },\n  \"http1Control\": \"EPOLICY: blocked by application DNS policy\",\n  \"http2Result\": {\n    \"status\": 200,\n    \"data\": \"REACHED_BLOCKED_ORIGIN\"\n  },\n  \"lookupCalls\": 1,\n  \"proxyObservedTraffic\": false,\n  \"events\": [\n    {\n      \"server\": \"origin\",\n      \"protocol\": \"h2\",\n      \"path\": \"/internal\"\n    }\n  ]\n}\n```\n\nThe important parts of the output are:\n\n- `http1Control` contains `EPOLICY`, proving the DNS policy blocks the destination under HTTP/1.\n- `lookupCalls` is still `1` after both requests, proving HTTP/2 never called the configured resolver.\n- `proxyObservedTraffic` is `false`, proving HTTP/2 did not use the configured proxy.\n- `http2Result.status` is `200`, and the sole event belongs to the origin, proving Axios connected directly to the blocked destination.\n\n### Impact\n\nThe vulnerable configuration is a Node.js application that:\n\n- enables Axios HTTP/2 using `httpVersion: 2`;\n- lets an application user influence the request destination; and\n- relies on Axios's `lookup` option or proxy routing to enforce a destination or egress policy.\n\nIn that setup, an unauthenticated application user may be able to make the server connect directly to loopback, private-network, or link-local services that the lookup policy or proxy would have rejected. Depending on the reachable service, this can expose cloud credentials or internal data, modify internal services, or affect availability.\n\nHTTP/2 support is marked experimental, but neither the HTTP/2 documentation nor the proxy documentation says that `lookup` and proxy controls are ignored. The proxy documentation states that HTTPS requests are sent through a CONNECT tunnel. More importantly, Axios's threat model tells callers that destination validation is their responsibility; this behavior silently bypasses such caller-supplied validation.\n\nI did not test against any third-party or production service. The PoC only uses listeners on my own machine.\n</details>\n\n---",
                    "title": "github - https://github.com/advisories/GHSA-3pq3-5fj3-cg6v"
                },
                {
                    "category": "other",
                    "text": "0.00527",
                    "title": "EPSS"
                },
                {
                    "category": "other",
                    "text": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N",
                    "title": "CVSSV4"
                },
                {
                    "category": "other",
                    "text": "7.0",
                    "title": "CVSSV4 base score"
                },
                {
                    "category": "other",
                    "text": "4.4",
                    "title": "NCSC Score"
                },
                {
                    "category": "other",
                    "text": "Is related to (a version of) an uncommon product, There is product data available from source Certbundde",
                    "title": "NCSC Score top increasing factors"
                },
                {
                    "category": "other",
                    "text": "Is related to an uncommon product vendor, Is related to a product by vendor Red Hat, The value of the most recent CVSS (V3) score",
                    "title": "NCSC Score top decreasing factors"
                },
                {
                    "category": "details",
                    "text": "Severity: 2\n",
                    "title": "Vendor assessment"
                }
            ],
            "product_status": {
                "known_affected": [
                    "CSAFPID-9482815",
                    "CSAFPID-6014972",
                    "CSAFPID-8902830",
                    "CSAFPID-8902831",
                    "CSAFPID-9053231",
                    "CSAFPID-5588486",
                    "CSAFPID-5588487",
                    "CSAFPID-5588488",
                    "CSAFPID-5588489",
                    "CSAFPID-5588490",
                    "CSAFPID-8580145",
                    "CSAFPID-8580144",
                    "CSAFPID-8580143",
                    "CSAFPID-8580142",
                    "CSAFPID-8580141",
                    "CSAFPID-8583063",
                    "CSAFPID-8925641",
                    "CSAFPID-8925639",
                    "CSAFPID-8925638",
                    "CSAFPID-9484963",
                    "CSAFPID-9484962",
                    "CSAFPID-9484961",
                    "CSAFPID-9527307",
                    "CSAFPID-9527315",
                    "CSAFPID-9527321",
                    "CSAFPID-9773074",
                    "CSAFPID-9773075",
                    "CSAFPID-9773076",
                    "CSAFPID-9773077",
                    "CSAFPID-9773078",
                    "CSAFPID-9773079",
                    "CSAFPID-9773080",
                    "CSAFPID-9773081",
                    "CSAFPID-9773082"
                ],
                "known_not_affected": [
                    "CSAFPID-8476867",
                    "CSAFPID-1409455"
                ]
            },
            "references": [
                {
                    "category": "external",
                    "summary": "Source - osv",
                    "url": "https://www.googleapis.com/download/storage/v1/b/osv-vulnerabilities/o/GIT%2FCVE-2026-101898.json?alt=media"
                },
                {
                    "category": "external",
                    "summary": "Source - nvd",
                    "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-101898"
                },
                {
                    "category": "external",
                    "summary": "Source - ncscclear",
                    "url": "https://vulnerabilities.ncsc.nl/manual/CVE-2026-101898"
                },
                {
                    "category": "external",
                    "summary": "Source - cveprojectv5",
                    "url": "https://www.cve.org/CVERecord?id=CVE-2026-101898"
                },
                {
                    "category": "external",
                    "summary": "Source - redhat",
                    "url": "https://access.redhat.com/security/cve/CVE-2026-101898"
                },
                {
                    "category": "external",
                    "summary": "Source - debian",
                    "url": "https://security-tracker.debian.org/tracker/CVE-2026-101898"
                },
                {
                    "category": "external",
                    "summary": "Source - first",
                    "url": "https://api.first.org/data/v1/epss"
                },
                {
                    "category": "external",
                    "summary": "Source - github",
                    "url": "https://github.com/advisories/GHSA-3pq3-5fj3-cg6v"
                },
                {
                    "category": "external",
                    "summary": "Source - osv",
                    "url": "https://www.googleapis.com/download/storage/v1/b/osv-vulnerabilities/o/npm%2FGHSA-3pq3-5fj3-cg6v.json?alt=media"
                },
                {
                    "category": "external",
                    "summary": "Source - certbundde",
                    "url": "https://wid.cert-bund.de/.well-known/csaf/white/2026/wid-sec-w-2026-4056.json"
                },
                {
                    "category": "external",
                    "summary": "Reference - cveprojectv5; github; nvd; osv; redhat",
                    "url": "https://github.com/axios/axios/commit/d19040bda7a8be2f82c3c6e1a5bc03917daee39a"
                },
                {
                    "category": "external",
                    "summary": "Reference - cveprojectv5; github; nvd; osv; redhat",
                    "url": "https://github.com/axios/axios/pull/11141"
                },
                {
                    "category": "external",
                    "summary": "Reference - cveprojectv5; github; nvd; osv; redhat",
                    "url": "https://github.com/axios/axios/releases/tag/v1.20.0"
                },
                {
                    "category": "external",
                    "summary": "Reference - cveprojectv5; github; nvd; osv; redhat",
                    "url": "https://github.com/axios/axios/security/advisories/GHSA-3pq3-5fj3-cg6v"
                },
                {
                    "category": "external",
                    "summary": "Reference - redhat",
                    "url": "https://www.cve.org/CVERecord?id=CVE-2026-101898"
                },
                {
                    "category": "external",
                    "summary": "Reference - github; osv; redhat",
                    "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-101898"
                },
                {
                    "category": "external",
                    "summary": "Reference - github",
                    "url": "https://github.com/advisories/GHSA-3pq3-5fj3-cg6v"
                },
                {
                    "category": "external",
                    "summary": "Reference - osv",
                    "url": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/101xxx/CVE-2026-101898.json"
                },
                {
                    "category": "external",
                    "summary": "Reference - certbundde",
                    "url": "https://wid.cert-bund.de/.well-known/csaf/white/2026/wid-sec-w-2026-4056.json"
                },
                {
                    "category": "external",
                    "summary": "Reference - certbundde",
                    "url": "https://wid.cert-bund.de/portal/wid/securityadvisory?name=WID-SEC-2026-4056"
                },
                {
                    "category": "external",
                    "summary": "Reference - certbundde",
                    "url": "https://confluence.atlassian.com/security/security-bulletin-october-20-2026-1874690162.html"
                }
            ],
            "scores": [
                {
                    "cvss_v3": {
                        "version": "3.1",
                        "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N",
                        "baseScore": 4.8,
                        "baseSeverity": "MEDIUM"
                    },
                    "products": [
                        "CSAFPID-5588486",
                        "CSAFPID-5588487",
                        "CSAFPID-5588488",
                        "CSAFPID-5588489",
                        "CSAFPID-5588490",
                        "CSAFPID-6014972",
                        "CSAFPID-8580141",
                        "CSAFPID-8580142",
                        "CSAFPID-8580143",
                        "CSAFPID-8580144",
                        "CSAFPID-8580145",
                        "CSAFPID-8583063",
                        "CSAFPID-8902830",
                        "CSAFPID-8902831",
                        "CSAFPID-8925638",
                        "CSAFPID-8925639",
                        "CSAFPID-8925641",
                        "CSAFPID-9053231",
                        "CSAFPID-9482815",
                        "CSAFPID-9484961",
                        "CSAFPID-9484962",
                        "CSAFPID-9484963",
                        "CSAFPID-9527307",
                        "CSAFPID-9527315",
                        "CSAFPID-9527321",
                        "CSAFPID-9773074",
                        "CSAFPID-9773075",
                        "CSAFPID-9773076",
                        "CSAFPID-9773077",
                        "CSAFPID-9773078",
                        "CSAFPID-9773079",
                        "CSAFPID-9773080",
                        "CSAFPID-9773081",
                        "CSAFPID-9773082"
                    ]
                }
            ],
            "title": "CVE-2026-101898"
        }
    ]
}