{"api_version":"1","generated_at":"2026-10-03T12:52:13+00:00","cve":"CVE-2026-19869","urls":{"html":"https://cve.report/CVE-2026-19869","api":"https://cve.report/api/cve/CVE-2026-19869.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-19869","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-19869"},"summary":{"title":"Privilege Escalation via Dropped Field-Level @authentication","description":"@neo4j/graphql from 5.2.0 until the patched versions fails to enforce field-level @authentication rules on root custom-resolver fields when a type-level @authentication rule is also present on the same operation type. When both a type-level @authentication (on Query/Mutation) and a field-level @authentication (on a root custom-resolver field within that type) are declared, only the type-level rule is evaluated and the field-level rule is silently discarded. As a result a stricter per-field requirement — such as an admin-role JWT claim (jwt: { roles_INCLUDES: \"admin\" }) — is never checked, and any client that satisfies the coarser type-level requirement can invoke the more-restricted field. No token forgery is involved: a legitimately issued, correctly signed non-admin token (e.g. roles: [\"user\"]) is sufficient.","state":"PUBLISHED","assigner":"Neo4j","published_at":"2026-08-18 17:16:57","updated_at":"2026-09-09 16:03:22"},"problem_types":["CWE-639","CWE-639 CWE-639 Authorization bypass through User-Controlled key"],"metrics":[{"version":"4.0","source":"3b236295-4ccd-4a1f-a1c1-a72eecc8d7b6","type":"Secondary","score":"7.6","severity":"HIGH","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","data":{"version":"4.0","vectorString":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","baseScore":7.6,"baseSeverity":"HIGH","attackVector":"NETWORK","attackComplexity":"LOW","attackRequirements":"PRESENT","privilegesRequired":"LOW","userInteraction":"NONE","vulnConfidentialityImpact":"HIGH","vulnIntegrityImpact":"HIGH","vulnAvailabilityImpact":"NONE","subConfidentialityImpact":"NONE","subIntegrityImpact":"NONE","subAvailabilityImpact":"NONE","exploitMaturity":"NOT_DEFINED","confidentialityRequirement":"NOT_DEFINED","integrityRequirement":"NOT_DEFINED","availabilityRequirement":"NOT_DEFINED","modifiedAttackVector":"NOT_DEFINED","modifiedAttackComplexity":"NOT_DEFINED","modifiedAttackRequirements":"NOT_DEFINED","modifiedPrivilegesRequired":"NOT_DEFINED","modifiedUserInteraction":"NOT_DEFINED","modifiedVulnConfidentialityImpact":"NOT_DEFINED","modifiedVulnIntegrityImpact":"NOT_DEFINED","modifiedVulnAvailabilityImpact":"NOT_DEFINED","modifiedSubConfidentialityImpact":"NOT_DEFINED","modifiedSubIntegrityImpact":"NOT_DEFINED","modifiedSubAvailabilityImpact":"NOT_DEFINED","Safety":"NOT_DEFINED","Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","valueDensity":"NOT_DEFINED","vulnerabilityResponseEffort":"NOT_DEFINED","providerUrgency":"NOT_DEFINED"}},{"version":"4.0","source":"CNA","type":"CVSS","score":"7.6","severity":"HIGH","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N","data":{"Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","Safety":"NOT_DEFINED","attackComplexity":"LOW","attackRequirements":"PRESENT","attackVector":"NETWORK","baseScore":7.6,"baseSeverity":"HIGH","exploitMaturity":"NOT_DEFINED","privilegesRequired":"LOW","providerUrgency":"NOT_DEFINED","subAvailabilityImpact":"NONE","subConfidentialityImpact":"NONE","subIntegrityImpact":"NONE","userInteraction":"NONE","valueDensity":"NOT_DEFINED","vectorString":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N","version":"4.0","vulnAvailabilityImpact":"NONE","vulnConfidentialityImpact":"HIGH","vulnIntegrityImpact":"HIGH","vulnerabilityResponseEffort":"NOT_DEFINED"}}],"references":[{"url":"https://github.com/neo4j/graphql/security/advisories/GHSA-82m8-p9px-c3x5","name":"https://github.com/neo4j/graphql/security/advisories/GHSA-82m8-p9px-c3x5","refsource":"3b236295-4ccd-4a1f-a1c1-a72eecc8d7b6","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://neo4j.com/security/CVE-2026-19869","name":"https://neo4j.com/security/CVE-2026-19869","refsource":"3b236295-4ccd-4a1f-a1c1-a72eecc8d7b6","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-19869","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-19869","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"neo4j","product":"graphql","version":"affected 7.0.0 7.6.0 semver","platforms":[]},{"source":"CNA","vendor":"neo4j","product":"graphql","version":"affected 5.2.0 5.12.15 semver","platforms":[]},{"source":"CNA","vendor":"neo4j","product":"graphql","version":"affected 6.0.0 6.6.4 semver","platforms":[]}],"timeline":[],"solutions":[{"source":"CNA","title":"","value":"Upgrade the library to 7.6.0+ or 5.12.15+. v6 is end-of-life and will not receive a fix. v5 releases prior to 5.2.0 are not affected.\n\n\n\nFor users who cannot upgrade immediately: do not combine a type-level @authentication with a field-level @authentication on the same root operation type. Because the type-level annotation is what shadows the field-level rule, removing it restores correct enforcement — instead apply a complete @authentication directive to each root field individually, including the full stricter rule on the sensitive field. Alternatively, enforce the stricter requirement inside the custom resolver's own code.","time":"","lang":"en"}],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":{"cve_year":"2026","cve_id":"19869","cve":"CVE-2026-19869","epss":"0.002790000","percentile":"0.202100000","score_date":"2026-09-09","updated_at":"2026-09-10 00:06:58"},"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"adp":[{"metrics":[{"other":{"content":{"id":"CVE-2026-19869","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"total"}],"role":"CISA Coordinator","timestamp":"2026-08-18T19:09:25.351012Z","version":"2.0.3"},"type":"ssvc"}}],"providerMetadata":{"dateUpdated":"2026-08-18T19:09:31.066Z","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","shortName":"CISA-ADP"},"title":"CISA ADP Vulnrichment"}],"cna":{"affected":[{"collectionURL":"https://registry.npmjs.org","defaultStatus":"unaffected","packageName":"@neo4j/graphql","product":"graphql","repo":"https://github.com/neo4j/graphql","vendor":"neo4j","versions":[{"lessThan":"7.6.0","status":"affected","version":"7.0.0","versionType":"semver"},{"lessThan":"5.12.15","status":"affected","version":"5.2.0","versionType":"semver"},{"lessThanOrEqual":"6.6.4","status":"affected","version":"6.0.0","versionType":"semver"}]}],"configurations":[{"lang":"en","supportingMedia":[{"base64":false,"type":"text/html","value":"<p>The application enables&nbsp;<code>features.authorization</code>&nbsp;and defines a root operation type (<code>Query</code>/<code>Mutation</code>) annotated with&nbsp;<code>@authentication</code>&nbsp;that also contains one or more custom-resolver fields carrying their own, stricter&nbsp;<code>@authentication</code>&nbsp;rule.</p>"}],"value":"The application enables features.authorization and defines a root operation type (Query/Mutation) annotated with @authentication that also contains one or more custom-resolver fields carrying their own, stricter @authentication rule."}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:a:neo4j:graphql:*:*:*:*:*:*:*:*","versionEndExcluding":"7.6.0","versionStartIncluding":"7.0.0","vulnerable":true},{"criteria":"cpe:2.3:a:neo4j:graphql:*:*:*:*:*:*:*:*","versionEndExcluding":"5.12.15","versionStartIncluding":"5.2.0","vulnerable":true},{"criteria":"cpe:2.3:a:neo4j:graphql:*:*:*:*:*:*:*:*","versionEndIncluding":"6.6.4","versionStartIncluding":"6.0.0","vulnerable":true}],"negate":false,"operator":"OR"}],"operator":"OR"}],"descriptions":[{"lang":"en","supportingMedia":[{"base64":false,"type":"text/html","value":"<code>@neo4j/graphql</code>&nbsp;from&nbsp;<code>5.2.0</code>&nbsp;until the patched versions fails to enforce field-level&nbsp;<code>@authentication</code>&nbsp;rules on root custom-resolver fields when a type-level&nbsp;<code>@authentication</code>&nbsp;rule is also present on the same operation type. When both a type-level&nbsp;<code>@authentication</code>&nbsp;(on&nbsp;<code>Query</code>/<code>Mutation</code>) and a field-level&nbsp;<code>@authentication</code>&nbsp;(on a root custom-resolver field within that type) are declared, only the type-level rule is evaluated and the field-level rule is silently discarded. As a result a stricter per-field requirement — such as an admin-role JWT claim (<code>jwt: { roles_INCLUDES: \"admin\" }</code>) — is never checked, and any client that satisfies the coarser type-level requirement can invoke the more-restricted field. No token forgery is involved: a legitimately issued, correctly signed non-admin token (e.g.&nbsp;<code>roles: [\"user\"]</code>) is sufficient."}],"value":"@neo4j/graphql from 5.2.0 until the patched versions fails to enforce field-level @authentication rules on root custom-resolver fields when a type-level @authentication rule is also present on the same operation type. When both a type-level @authentication (on Query/Mutation) and a field-level @authentication (on a root custom-resolver field within that type) are declared, only the type-level rule is evaluated and the field-level rule is silently discarded. As a result a stricter per-field requirement — such as an admin-role JWT claim (jwt: { roles_INCLUDES: \"admin\" }) — is never checked, and any client that satisfies the coarser type-level requirement can invoke the more-restricted field. No token forgery is involved: a legitimately issued, correctly signed non-admin token (e.g. roles: [\"user\"]) is sufficient."}],"impacts":[{"capecId":"CAPEC-233","descriptions":[{"lang":"en","value":"CAPEC-233 Privilege Escalation"}]}],"metrics":[{"cvssV4_0":{"Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","Safety":"NOT_DEFINED","attackComplexity":"LOW","attackRequirements":"PRESENT","attackVector":"NETWORK","baseScore":7.6,"baseSeverity":"HIGH","exploitMaturity":"NOT_DEFINED","privilegesRequired":"LOW","providerUrgency":"NOT_DEFINED","subAvailabilityImpact":"NONE","subConfidentialityImpact":"NONE","subIntegrityImpact":"NONE","userInteraction":"NONE","valueDensity":"NOT_DEFINED","vectorString":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N","version":"4.0","vulnAvailabilityImpact":"NONE","vulnConfidentialityImpact":"HIGH","vulnIntegrityImpact":"HIGH","vulnerabilityResponseEffort":"NOT_DEFINED"},"format":"CVSS","scenarios":[{"lang":"en","value":"GENERAL"}]}],"problemTypes":[{"descriptions":[{"cweId":"CWE-639","description":"CWE-639 Authorization bypass through User-Controlled key","lang":"en","type":"CWE"}]}],"providerMetadata":{"dateUpdated":"2026-08-19T16:02:04.528Z","orgId":"3b236295-4ccd-4a1f-a1c1-a72eecc8d7b6","shortName":"Neo4j"},"references":[{"tags":["third-party-advisory"],"url":"https://github.com/neo4j/graphql/security/advisories/GHSA-82m8-p9px-c3x5"},{"tags":["vendor-advisory"],"url":"https://neo4j.com/security/CVE-2026-19869"}],"solutions":[{"lang":"en","supportingMedia":[{"base64":false,"type":"text/html","value":"<p>Upgrade the library to&nbsp;<code>7.6.0</code>+ or&nbsp;<code>5.12.15</code>+. v6 is end-of-life and will not receive a fix. v5 releases prior to&nbsp;<code>5.2.0</code>&nbsp;are not affected.</p><p>For users who cannot upgrade immediately: do not combine a type-level&nbsp;<code>@authentication</code>&nbsp;with a field-level&nbsp;<code>@authentication</code>&nbsp;on the same root operation type. Because the type-level annotation is what shadows the field-level rule, removing it restores correct enforcement — instead apply a complete&nbsp;<code>@authentication</code>&nbsp;directive to each root field individually, including the full stricter rule on the sensitive field. Alternatively, enforce the stricter requirement inside the custom resolver's own code.</p>"}],"value":"Upgrade the library to 7.6.0+ or 5.12.15+. v6 is end-of-life and will not receive a fix. v5 releases prior to 5.2.0 are not affected.\n\n\n\nFor users who cannot upgrade immediately: do not combine a type-level @authentication with a field-level @authentication on the same root operation type. Because the type-level annotation is what shadows the field-level rule, removing it restores correct enforcement — instead apply a complete @authentication directive to each root field individually, including the full stricter rule on the sensitive field. Alternatively, enforce the stricter requirement inside the custom resolver's own code."}],"source":{"discovery":"INTERNAL"},"title":"Privilege Escalation via Dropped Field-Level @authentication","x_generator":{"engine":"Vulnogram 1.0.4"}}},"cveMetadata":{"assignerOrgId":"3b236295-4ccd-4a1f-a1c1-a72eecc8d7b6","assignerShortName":"Neo4j","cveId":"CVE-2026-19869","datePublished":"2026-08-18T16:35:19.878Z","dateReserved":"2026-08-14T11:22:26.042Z","dateUpdated":"2026-08-19T16:02:04.528Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-08-18 17:16:57","lastModifiedDate":"2026-09-09 16:03:22","problem_types":["CWE-639","CWE-639 CWE-639 Authorization bypass through User-Controlled key"],"metrics":{"cvssMetricV40":[{"source":"3b236295-4ccd-4a1f-a1c1-a72eecc8d7b6","type":"Secondary","cvssData":{"version":"4.0","vectorString":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","baseScore":7.6,"baseSeverity":"HIGH","attackVector":"NETWORK","attackComplexity":"LOW","attackRequirements":"PRESENT","privilegesRequired":"LOW","userInteraction":"NONE","vulnConfidentialityImpact":"HIGH","vulnIntegrityImpact":"HIGH","vulnAvailabilityImpact":"NONE","subConfidentialityImpact":"NONE","subIntegrityImpact":"NONE","subAvailabilityImpact":"NONE","exploitMaturity":"NOT_DEFINED","confidentialityRequirement":"NOT_DEFINED","integrityRequirement":"NOT_DEFINED","availabilityRequirement":"NOT_DEFINED","modifiedAttackVector":"NOT_DEFINED","modifiedAttackComplexity":"NOT_DEFINED","modifiedAttackRequirements":"NOT_DEFINED","modifiedPrivilegesRequired":"NOT_DEFINED","modifiedUserInteraction":"NOT_DEFINED","modifiedVulnConfidentialityImpact":"NOT_DEFINED","modifiedVulnIntegrityImpact":"NOT_DEFINED","modifiedVulnAvailabilityImpact":"NOT_DEFINED","modifiedSubConfidentialityImpact":"NOT_DEFINED","modifiedSubIntegrityImpact":"NOT_DEFINED","modifiedSubAvailabilityImpact":"NOT_DEFINED","Safety":"NOT_DEFINED","Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","valueDensity":"NOT_DEFINED","vulnerabilityResponseEffort":"NOT_DEFINED","providerUrgency":"NOT_DEFINED"}}],"ssvcV203":[{"source":"134c704f-9b21-4f2e-91b3-4a467353bcc0","ssvcData":{"timestamp":"2026-08-18T19:09:25.351012Z","id":"CVE-2026-19869","options":[{"exploitation":"none"},{"automatable":"no"},{"technicalImpact":"total"}],"role":"CISA Coordinator","version":"2.0.3"}}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"19869","Ordinal":"1","Title":"Privilege Escalation via Dropped Field-Level @authentication","CVE":"CVE-2026-19869","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"19869","Ordinal":"1","NoteData":"@neo4j/graphql from 5.2.0 until the patched versions fails to enforce field-level @authentication rules on root custom-resolver fields when a type-level @authentication rule is also present on the same operation type. When both a type-level @authentication (on Query/Mutation) and a field-level @authentication (on a root custom-resolver field within that type) are declared, only the type-level rule is evaluated and the field-level rule is silently discarded. As a result a stricter per-field requirement — such as an admin-role JWT claim (jwt: { roles_INCLUDES: \"admin\" }) — is never checked, and any client that satisfies the coarser type-level requirement can invoke the more-restricted field. No token forgery is involved: a legitimately issued, correctly signed non-admin token (e.g. roles: [\"user\"]) is sufficient.","Type":"Description","Title":"Privilege Escalation via Dropped Field-Level @authentication"}]}}}