{"id":"CVE-2026-35613","sourceIdentifier":"security-advisories@github.com","published":"2026-04-07T17:16:35.583","lastModified":"2026-10-26T21:10:00.170","vulnStatus":"Analyzed","cveTags":[],"descriptions":[{"lang":"en","value":"coursevault-preview is a utility for previewing course material files from a configured directory. coursevault-preview versions prior to 0.1.1 contain a path traversal vulnerability in the resolveSafe utility. The boundary check used String.prototype.startsWith(baseDir) on a normalized path, which does not enforce a directory boundary. An attacker who controls the relativePath argument to affected CoursevaultPreview methods may be able to read files outside the configured baseDir when a sibling directory exists whose name shares the same string prefix. This vulnerability is fixed in 0.1.1."},{"lang":"es","value":"coursevault-preview es una utilidad para previsualizar archivos de material de curso desde un directorio configurado. Las versiones de coursevault-preview anteriores a la 0.1.1 contienen una vulnerabilidad de salto de ruta en la utilidad resolveSafe. La comprobación de límites utilizaba String.prototype.startsWith(baseDir) en una ruta normalizada, lo que no impone un límite de directorio. Un atacante que controla el argumento relativePath de los métodos afectados de CoursevaultPreview podría leer archivos fuera del baseDir configurado cuando existe un directorio hermano cuyo nombre comparte el mismo prefijo de cadena. Esta vulnerabilidad está corregida en la 0.1.1."}],"affected":[{"source":"security-advisories@github.com","affectedData":[{"vendor":"moritzmyrz","product":"coursevault-preview","versions":[{"version":"< 0.1.1","status":"affected"}]}]}],"metrics":{"cvssMetricV31":[{"source":"security-advisories@github.com","type":"Secondary","cvssData":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N","baseScore":5.1,"baseSeverity":"MEDIUM","attackVector":"LOCAL","attackComplexity":"HIGH","privilegesRequired":"NONE","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"NONE","availabilityImpact":"NONE"},"exploitabilityScore":1.4,"impactScore":3.6},{"source":"nvd@nist.gov","type":"Primary","cvssData":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:N","baseScore":4.7,"baseSeverity":"MEDIUM","attackVector":"LOCAL","attackComplexity":"HIGH","privilegesRequired":"LOW","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"NONE","availabilityImpact":"NONE"},"exploitabilityScore":1.0,"impactScore":3.6}],"ssvcV203":[{"source":"134c704f-9b21-4f2e-91b3-4a467353bcc0","ssvcData":{"timestamp":"2026-04-09T15:08:47.329674Z","id":"CVE-2026-35613","options":[{"exploitation":"none"},{"automatable":"no"},{"technicalImpact":"partial"}],"role":"CISA Coordinator","version":"2.0.3"}}]},"weaknesses":[{"source":"security-advisories@github.com","type":"Secondary","description":[{"lang":"en","value":"CWE-22"}]}],"configurations":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:a:moritzmyrz:coursevault-preview:*:*:*:*:*:node.js:*:*","versionEndExcluding":"0.1.1","matchCriteriaId":"FBD01254-D83E-43FE-B695-5ADF82D00EDD"}]}]}],"references":[{"url":"https://github.com/moritzmyrz/coursevault-preview/security/advisories/GHSA-9h9m-rr67-9jpg","source":"security-advisories@github.com","tags":["Exploit","Vendor Advisory"]}]}