Katalog CVE

CVE-2026-94620

KrytyczneCVSS 9.4
Opublikowano: Zaktualizowano: Przetłumaczono: NVD NIST

Streszczenie

Narzędzie Classroom 50 w wersjach przed 1.11.0 podczas wykonywania `gh teacher download` klonuje repozytoria zadań studentów, a następnie zapisuje artefakty autograde (`result.json` i `results.json`) do sklonowanego katalogu. Zapis podążał za dowiązaniami symbolicznymi, więc student, który zatwierdził `result.json` lub `results.json` jako symlink, mógł przekierować zapis nauczyciela do dowolnej ścieżki (np. `~/.zshrc`, `~/.ssh/authorized_keys`, plik cron lub hook gita), a zapisywane dane były kontrolowane przez atakującego. Prowadzi to do dowolnego zapisu plików i wykonania kodu z uprawnieniami nauczyciela, którego token `gh` ma uprawnienia `admin:org`, `repo` i `workflow` w całej organizacji.

Ocena ryzyka

Student może doprowadzić do wykonania dowolnego kodu na stacji nauczyciela i przejąć token GitHub z szerokimi uprawnieniami administracyjnymi do całej organizacji classroom, co grozi kompromitacją wszystkich repozytoriów i workflow.

Rekomendacja

Zaktualizuj Classroom 50 do wersji 1.11.0 lub nowszej; do czasu aktualizacji unikaj uruchamiania `gh teacher download` na niezaufanych repozytoriach studentów lub uruchamiaj je w jednorazowym sandboxie bez dostępu do wrażliwych plików i poświadczeń.

Powiązane podatności

Oryginalny opis (angielski, źródło NVD)

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'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's write to an arbitrary path — 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'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.

Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS