{"id":31891,"date":"2026-10-02T00:32:00","date_gmt":"2026-10-01T16:32:00","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-94620"},"modified":"2026-10-02T00:32:00","modified_gmt":"2026-10-01T16:32:00","slug":"cve-2026-94620","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-94620","title":{"rendered":"CVE-2026-94620 &#8211; Classroom 50 is a free and open-source tool for managing and grading programming assignmen"},"content":{"rendered":"<p>Classroom 50 is a free and open-source tool for managing and grading programming assignments via GitHub. Prior to version 1.11.0, `gh teacher download` clones each student&#8217;s assignment repository and then writes autograde artifacts (`result.json` and `results.json`) into the just-cloned working tree. The write followed symlinks, so a student who committed `result.json` or `results.json` as a **symlink** (materialized verbatim by `git clone`) could redirect the teacher&#8217;s write to an arbitrary path \u2014 e.g. `~\/.zshrc`, `~\/.ssh\/authorized_keys`, a cron file, or an in-clone `.git\/hooks\/*` file that git subsequently executes. The written bytes are attacker-controlled (the student&#8217;s uploaded release asset for `result.json`; student-chosen submit-tag names for `results.json`). This is an arbitrary file write leading to code execution as the teacher, whose `gh` token carries `admin:org`, `repo`, and `workflow` across the entire classroom organization. Version 1.11.0 contains a patch. Some workarounds are available. Avoid running `gh teacher download` against untrusted student repositories, or run it inside a disposable sandbox \/ container with no access to sensitive host files or credentials. Inspect cloned trees for symlinked, hardlinked, or special (`result.json`\/`results.json`) entries before allowing the artifact-refresh step to run.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Classroom 50 is a free and open-source tool for managing and grading programming assignments via GitHub. Prior to version 1.11.0, `gh teacher download` clones each student&#8217;s assignment repository and <\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-31891","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/31891","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=31891"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=31891"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=31891"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}