{"id":"GHSA-93q6-wwjh-jc6h","revision":"71a34c40f2b2465baa1dd662705dcf05","records":[{"revision":"71a34c40f2b2465baa1dd662705dcf05","observedAt":"2026-10-24T13:17:17.793+00:00","statement":{"source":"osv","id":"GHSA-93q6-wwjh-jc6h","aliases":["CVE-2026-50290"],"title":"@asymmetric-effort/specifyjs: CSS expression sanitization is bypassable in renderToString","description":"## Finding\n\n**Location**: `core/src/server/render-to-string.ts:307-311`\n\nCSS value sanitization stripped `expression(` and `url(javascript:` using simple regex, but could be bypassed with CSS unicode escapes (`\\65xpression(`), null bytes, or CSS comments (`exp/**/ression(`).\n\n**Mitigating Factor**: These CSS injection vectors only work in legacy browsers (IE6-IE10). SpecifyJS targets modern browsers.\n\n## Status\n\n**Fixed in v0.2.136** — CSS sanitization now normalizes unicode escapes and strips CSS comments before pattern matching. Also checks for `behavior:`, `-moz-binding`, and `-o-link` patterns.","state":0,"publishedAt":"2026-07-02T19:08:45+00:00","modifiedAt":"2026-09-10T03:51:11.2880405+00:00","affected":[{"ecosystem":"npm","name":"@asymmetric-effort/specifyjs","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"0.2.136"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V4","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"MODERATE"}],"references":["https://github.com/asymmetric-effort/specifyjs/security/advisories/GHSA-93q6-wwjh-jc6h","https://github.com/asymmetric-effort/specifyjs/commit/25d1fb491d99479efdf501f5f75e0bb80c908f0a","https://github.com/asymmetric-effort/specifyjs"],"sourceUrl":"https://github.com/advisories/GHSA-93q6-wwjh-jc6h","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-93q6-wwjh-jc6h","identifiers":["GHSA-93q6-wwjh-jc6h","CVE-2026-50290"]},"retained":false,"historicalAffected":[]}],"coverage":[]}