🇰🇷 한글 설명
Classroom 50 1.11.0 미만 버전에서 발생하는 취약점으로, 학생이 심볼릭 링크를 포함한 저장소를 제출할 경우 교사의 시스템 파일에 임의의 파일을 작성할 수 있습니다. 이를 통해 교사의 권한으로 악성 코드를 실행하거나 조직 전체의 권한을 탈취할 수 있는 위험이 있습니다.
💡 쉬운 설명
학생이 제출한 과제 파일이 사실은 시스템의 중요한 파일을 가리키는 '가짜 연결 통로'일 수 있습니다. 교사가 과제를 내려받을 때 이 통로를 통해 교사의 컴퓨터 설정 파일이 학생이 원하는 내용으로 바뀌어 해킹당할 수 있습니다.
🇺🇸 원문 (English)
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.
📍 영향받는 시스템
Classroom 50 versions prior to 1.11.0
⚔️ 공격 벡터
심볼릭 링크를 이용한 임의 파일 쓰기(Arbitrary File Write)를 통한 원격 코드 실행(RCE)
🛡️ 대응 방법
Classroom 50를 1.11.0 이상 버전으로 업데이트하거나, 신뢰할 수 없는 저장소에 대해 샌드박스 환경에서 실행하십시오.
🔧 검증 코드
명령어 결과로 1.11.0 미만의 버전 번호가 출력되면 취약한 버전이 설치된 상태입니다.
gh --version | grep -E 'Classroom 50' | awk '{print $NF}' | grep -v '1.11.0'