{"api_version":"1","generated_at":"2026-09-01T03:52:58+00:00","cve":"CVE-2026-77950","urls":{"html":"https://cve.report/CVE-2026-77950","api":"https://cve.report/api/cve/CVE-2026-77950.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-77950","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-77950"},"summary":{"title":"RPC error handler fails open in AshTypescript, disclosing unredacted errors","description":"Generation of Error Message Containing Sensitive Information vulnerability in ash-project ash_typescript allows an unauthenticated attacker to receive unredacted internal error data by provoking an error shape the configured error handler does not match.\n\napply_error_handler/3 in lib/ash_typescript/rpc/errors.ex is the only hook an application has for redacting or suppressing errors before they reach the client, with a nil return dropping the error entirely. Its rescue clause logs a warning and then returns the original, pre-handler error map. Error handlers are conventionally written as pattern-matching functions over expected error shapes, so an unmatched shape raises FunctionClauseError and the raw transformed error, including any secrets carried in vars, is emitted instead. An intent to suppress an error becomes an intent to publish it. The rescue catches exceptions only, so a handler that throws or exits still propagates.\n\nThis issue affects ash_typescript: from 0.8.0 before 0.18.0.","state":"PUBLISHED","assigner":"EEF","published_at":"2026-09-01 03:16:51","updated_at":"2026-09-01 03:16:51"},"problem_types":["CWE-209","CWE-209 CWE-209 Generation of Error Message Containing Sensitive Information"],"metrics":[{"version":"4.0","source":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","type":"Secondary","score":"6.3","severity":"MEDIUM","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/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:N/UI:N/VC:L/VI:N/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":6.3,"baseSeverity":"MEDIUM","attackVector":"NETWORK","attackComplexity":"LOW","attackRequirements":"PRESENT","privilegesRequired":"NONE","userInteraction":"NONE","vulnConfidentialityImpact":"LOW","vulnIntegrityImpact":"NONE","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":"6.3","severity":"MEDIUM","vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/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":6.3,"baseSeverity":"MEDIUM","privilegesRequired":"NONE","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:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N","version":"4.0","vulnAvailabilityImpact":"NONE","vulnConfidentialityImpact":"LOW","vulnIntegrityImpact":"NONE","vulnerabilityResponseEffort":"NOT_DEFINED"}}],"references":[{"url":"https://github.com/ash-project/ash_typescript/commit/59d8e985a98cf2e01794dbe5b919b897a95311f4","name":"https://github.com/ash-project/ash_typescript/commit/59d8e985a98cf2e01794dbe5b919b897a95311f4","refsource":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://osv.dev/vulnerability/EEF-CVE-2026-77950","name":"https://osv.dev/vulnerability/EEF-CVE-2026-77950","refsource":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://github.com/ash-project/ash_typescript/security/advisories/GHSA-mjr7-r3rf-x963","name":"https://github.com/ash-project/ash_typescript/security/advisories/GHSA-mjr7-r3rf-x963","refsource":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://cna.erlef.org/cves/CVE-2026-77950.html","name":"https://cna.erlef.org/cves/CVE-2026-77950.html","refsource":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-77950","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-77950","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"ash-project","product":"ash_typescript","version":"affected 0.8.0 0.18.0 semver","platforms":[]},{"source":"CNA","vendor":"ash-project","product":"ash_typescript","version":"affected cb01cc8749e5a2a17fb45aedbe75df30a9f1126e 59d8e985a98cf2e01794dbe5b919b897a95311f4 git","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[{"source":"CNA","value":"Peter Ullrich","lang":"en"},{"source":"CNA","value":"Peter Ullrich","lang":"en"},{"source":"CNA","value":"Torkild Gundersen Kjevik / Ash Project","lang":"en"},{"source":"CNA","value":"Jonatan Männchen / EEF","lang":"en"}],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":null,"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"collectionURL":"https://repo.hex.pm","cpes":["cpe:2.3:a:ash-project:ash_typescript:*:*:*:*:*:*:*:*"],"defaultStatus":"unaffected","modules":["'Elixir.AshTypescript.Rpc.Errors'"],"packageName":"ash_typescript","packageURL":"pkg:hex/ash_typescript","product":"ash_typescript","programFiles":["lib/ash_typescript/rpc/errors.ex"],"programRoutines":[{"name":"'Elixir.AshTypescript.Rpc.Errors':apply_error_handler/3"},{"name":"'Elixir.AshTypescript.Rpc.Errors':to_errors/5"}],"repo":"https://github.com/ash-project/ash_typescript","vendor":"ash-project","versions":[{"lessThan":"0.18.0","status":"affected","version":"0.8.0","versionType":"semver"}]},{"collectionURL":"https://github.com","cpes":["cpe:2.3:a:ash-project:ash_typescript:*:*:*:*:*:*:*:*"],"defaultStatus":"unaffected","modules":["'Elixir.AshTypescript.Rpc.Errors'"],"packageName":"ash-project/ash_typescript","packageURL":"pkg:github/ash-project/ash_typescript","product":"ash_typescript","programFiles":["lib/ash_typescript/rpc/errors.ex"],"programRoutines":[{"name":"'Elixir.AshTypescript.Rpc.Errors':apply_error_handler/3"},{"name":"'Elixir.AshTypescript.Rpc.Errors':to_errors/5"}],"repo":"https://github.com/ash-project/ash_typescript","vendor":"ash-project","versions":[{"lessThan":"59d8e985a98cf2e01794dbe5b919b897a95311f4","status":"affected","version":"cb01cc8749e5a2a17fb45aedbe75df30a9f1126e","versionType":"git"}]}],"configurations":[{"lang":"en","supportingMedia":[{"base64":false,"type":"text/html","value":"<p>The application exposes an AshTypescript RPC endpoint over HTTP and configures a custom <code>error_handler</code> in its <code>typescript_rpc</code> domain section for redaction or suppression.</p>"},{"base64":false,"type":"text/markdown","value":"The application exposes an AshTypescript RPC endpoint over HTTP and configures a custom `error_handler` in its `typescript_rpc` domain section for redaction or suppression."}],"value":"The application exposes an AshTypescript RPC endpoint over HTTP and configures a custom error_handler in its typescript_rpc domain section for redaction or suppression."}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:a:ash-project:ash_typescript:*:*:*:*:*:*:*:*","versionEndExcluding":"0.18.0","versionStartIncluding":"0.8.0","vulnerable":true}],"negate":false,"operator":"OR"}],"operator":"AND"}],"credits":[{"lang":"en","type":"finder","value":"Peter Ullrich"},{"lang":"en","type":"reporter","value":"Peter Ullrich"},{"lang":"en","type":"remediation developer","value":"Torkild Gundersen Kjevik / Ash Project"},{"lang":"en","type":"coordinator","value":"Jonatan Männchen / EEF"}],"descriptions":[{"lang":"en","supportingMedia":[{"base64":false,"type":"text/html","value":"<p>Generation of Error Message Containing Sensitive Information vulnerability in ash-project ash_typescript allows an unauthenticated attacker to receive unredacted internal error data by provoking an error shape the configured error handler does not match.</p>\n<p><code>apply_error_handler/3</code> in <code>lib/ash_typescript/rpc/errors.ex</code> is the only hook an application has for redacting or suppressing errors before they reach the client, with a <code>nil</code> return dropping the error entirely. Its <code>rescue</code> clause logs a warning and then returns the original, pre-handler error map. Error handlers are conventionally written as pattern-matching functions over expected error shapes, so an unmatched shape raises <code>FunctionClauseError</code> and the raw transformed error, including any secrets carried in <code>vars</code>, is emitted instead. An intent to suppress an error becomes an intent to publish it. The <code>rescue</code> catches exceptions only, so a handler that throws or exits still propagates.</p>\n<p>This issue affects ash_typescript: from 0.8.0 before 0.18.0.</p>"},{"base64":false,"type":"text/markdown","value":"Generation of Error Message Containing Sensitive Information vulnerability in ash-project ash_typescript allows an unauthenticated attacker to receive unredacted internal error data by provoking an error shape the configured error handler does not match.\n\n`apply_error_handler/3` in `lib/ash_typescript/rpc/errors.ex` is the only hook an application has for redacting or suppressing errors before they reach the client, with a `nil` return dropping the error entirely. Its `rescue` clause logs a warning and then returns the original, pre-handler error map. Error handlers are conventionally written as pattern-matching functions over expected error shapes, so an unmatched shape raises `FunctionClauseError` and the raw transformed error, including any secrets carried in `vars`, is emitted instead. An intent to suppress an error becomes an intent to publish it. The `rescue` catches exceptions only, so a handler that throws or exits still propagates.\n\nThis issue affects ash_typescript: from 0.8.0 before 0.18.0."}],"value":"Generation of Error Message Containing Sensitive Information vulnerability in ash-project ash_typescript allows an unauthenticated attacker to receive unredacted internal error data by provoking an error shape the configured error handler does not match.\n\napply_error_handler/3 in lib/ash_typescript/rpc/errors.ex is the only hook an application has for redacting or suppressing errors before they reach the client, with a nil return dropping the error entirely. Its rescue clause logs a warning and then returns the original, pre-handler error map. Error handlers are conventionally written as pattern-matching functions over expected error shapes, so an unmatched shape raises FunctionClauseError and the raw transformed error, including any secrets carried in vars, is emitted instead. An intent to suppress an error becomes an intent to publish it. The rescue catches exceptions only, so a handler that throws or exits still propagates.\n\nThis issue affects ash_typescript: from 0.8.0 before 0.18.0."}],"impacts":[{"capecId":"CAPEC-54","descriptions":[{"lang":"en","value":"CAPEC-54 Query System for Information"}]}],"metrics":[{"cvssV4_0":{"Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","Safety":"NOT_DEFINED","attackComplexity":"LOW","attackRequirements":"PRESENT","attackVector":"NETWORK","baseScore":6.3,"baseSeverity":"MEDIUM","privilegesRequired":"NONE","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:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N","version":"4.0","vulnAvailabilityImpact":"NONE","vulnConfidentialityImpact":"LOW","vulnIntegrityImpact":"NONE","vulnerabilityResponseEffort":"NOT_DEFINED"},"format":"CVSS","scenarios":[{"lang":"en","value":"GENERAL"}]}],"problemTypes":[{"descriptions":[{"cweId":"CWE-209","description":"CWE-209 Generation of Error Message Containing Sensitive Information","lang":"en","type":"CWE"}]}],"providerMetadata":{"dateUpdated":"2026-09-01T02:08:54.754Z","orgId":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","shortName":"EEF"},"references":[{"tags":["related","vendor-advisory"],"url":"https://github.com/ash-project/ash_typescript/security/advisories/GHSA-mjr7-r3rf-x963"},{"tags":["related"],"url":"https://cna.erlef.org/cves/CVE-2026-77950.html"},{"tags":["related"],"url":"https://osv.dev/vulnerability/EEF-CVE-2026-77950"},{"tags":["patch"],"url":"https://github.com/ash-project/ash_typescript/commit/59d8e985a98cf2e01794dbe5b919b897a95311f4"}],"source":{"discovery":"EXTERNAL"},"title":"RPC error handler fails open in AshTypescript, disclosing unredacted errors"}},"cveMetadata":{"assignerOrgId":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","assignerShortName":"EEF","cveId":"CVE-2026-77950","datePublished":"2026-09-01T02:08:54.754Z","dateReserved":"2026-08-30T17:30:01.402Z","dateUpdated":"2026-09-01T02:08:54.754Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-09-01 03:16:51","lastModifiedDate":"2026-09-01 03:16:51","problem_types":["CWE-209","CWE-209 CWE-209 Generation of Error Message Containing Sensitive Information"],"metrics":{"cvssMetricV40":[{"source":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","type":"Secondary","cvssData":{"version":"4.0","vectorString":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/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":6.3,"baseSeverity":"MEDIUM","attackVector":"NETWORK","attackComplexity":"LOW","attackRequirements":"PRESENT","privilegesRequired":"NONE","userInteraction":"NONE","vulnConfidentialityImpact":"LOW","vulnIntegrityImpact":"NONE","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"}}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"77950","Ordinal":"1","Title":"RPC error handler fails open in AshTypescript, disclosing unreda","CVE":"CVE-2026-77950","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"77950","Ordinal":"1","NoteData":"Generation of Error Message Containing Sensitive Information vulnerability in ash-project ash_typescript allows an unauthenticated attacker to receive unredacted internal error data by provoking an error shape the configured error handler does not match.\n\napply_error_handler/3 in lib/ash_typescript/rpc/errors.ex is the only hook an application has for redacting or suppressing errors before they reach the client, with a nil return dropping the error entirely. Its rescue clause logs a warning and then returns the original, pre-handler error map. Error handlers are conventionally written as pattern-matching functions over expected error shapes, so an unmatched shape raises FunctionClauseError and the raw transformed error, including any secrets carried in vars, is emitted instead. An intent to suppress an error becomes an intent to publish it. The rescue catches exceptions only, so a handler that throws or exits still propagates.\n\nThis issue affects ash_typescript: from 0.8.0 before 0.18.0.","Type":"Description","Title":"RPC error handler fails open in AshTypescript, disclosing unreda"}]}}}