Trawling

SourceHut meta.sr.ht, 가입 비활성 우회 취약점을 0.89.0에서 수정

CVE-2026-121728은 공개 가입을 꺼 둔 meta.sr.ht에서 비회원이 `/register/step2`에 요청해 계정을 만들 수 있는 취약점입니다. NVD는 0.56.11 이상, 0.89.0 미만을 영향 범위로 기록했으며, 0.89.0은 GraphQL 등록 처리와 기존 Python 웹 폼 양쪽에서 가입 설정을 검사합니다.

SourceHut의 meta.sr.ht에서 공개 가입을 비활성화한 서버에도 비회원이 새 계정을 만들 수 있는 취약점이 발견돼 CVE-2026-121728이 부여됐습니다. Arusekk는 2026년 11월 2일 SourceHut 보안 메일링 리스트에 문제를 알렸고, 이튿날 수정 커밋이 올라왔습니다. NVD는 meta.sr.ht 0.56.11 이상, 0.89.0 미만을 영향 버전으로 기록했습니다. 수정은 0.89.0에 포함됐습니다.

Arusekk에 따르면 문제는 2021년 프런트엔드의 등록 코드를 GraphQL 백엔드로 옮기는 과정에서 생겼습니다. SourceHut은 Flask와 Jinja를 쓰던 프런트엔드의 등록 처리를 Go 기반 GraphQL 백엔드로 이전했습니다. 가입 설정이 꺼져 있으면 프런트엔드는 등록 폼을 보여주지 않고 가입이 닫혔다고 표시했지만, 서버의 폼 제출 처리부는 남아 있었습니다. 오류 경로에서는 가입이 닫혔다고 응답했지만, 정상 등록을 처리하는 성공 경로에서는 가입 설정을 검사하지 않았습니다.

비회원은 사용자 이름, 이메일 주소, 비밀번호를 담아 /register/step2에 POST 요청을 보낼 수 있었습니다. 등록 폼이 표시되지 않아 폼에서 CSRF 토큰을 받을 수는 없었지만, Arusekk는 /login에서 받은 토큰을 등록 요청에 넣으면 처리된다고 확인했습니다. CSRF 토큰은 다른 사이트가 사용자를 대신해 요청을 보내는 공격을 막는 데 쓰이지만, 로그인용 토큰이 등록 처리에도 받아들여졌습니다. 계정을 만들려면 해당 서버에 SMTP가 제대로 구성돼 있어야 했고, 이메일 확인도 마쳐야 했습니다.

수정 커밋은 Go GraphQL의 RegisterAccount 처리부에서 meta.sr.ht::settings의 registration 값을 확인해 가입이 꺼져 있으면 요청을 거부하도록 했습니다. 기존 Python 웹 폼 처리부에도 가입 허용 여부 검사가 추가됐습니다. Arusekk가 작성한 수정은 공개 저장소의 0.89.0 태그에 포함됐습니다.

참고 자료

오류 제보