
대학 연락처 추적 웹 애플리케이션에서 인증되지 않은 사용자 등록 및 방문 생성을 대상으로 하는 CVE-2021-33831용 자동화 Perl 익스플로잇으로, 대량 계정 생성 및 서비스 거부를 시연합니다.
이 애플리케이션은 독일 감염법에 따라 사람들을 추적하여 Covid-19 감염 사슬을 추적할 수 있도록 하는 데 사용됩니다. 이것은 iCampus라는 학생 프로젝트로 만들어졌으며, 빌다우 대학뿐만 아니라 콧부스-젠프텐베르크에서도 사용됩니다. 약 10,000명의 사람들이 영향을 받고 있습니다. 대학의 손님들은 이 애플리케이션을 사용해야 합니다.
이 애플리케이션은 Vue 프론트엔드와 Laravel 백엔드로 구성되어 있습니다.
백엔드는 대학 손님의 등록을 허용하는 게스트 사용자 등록 엔드포인트 /corona-app-backend/api/account/register를 노출합니다.
이는 대학 손님의 등록을 허용합니다. 대학 구성원은 SSO 사용자 이름/비밀번호 조합을 사용하여 로그인할 수 있습니다.
이 등록 엔드포인트는 (예: 캡차를 통한) 자동 사용자 생성으로부터 보호되지 않습니다. 프로그램이 /corona-app-backend/sanctum/csrf-cookie를 통해 CSRF 쿠키를 획득하고 /corona-app-backend/account를 통해 세션 토큰을 획득하면 사용자를 생성할 수 있습니다. 원하는 만큼, 원하는 시간만큼. 가짜 사용자가 너무 많으면 보건 기관이 감염 사슬을 추적하는 것이 사실상 불가능해지므로 이는 서비스 거부(DoS) 공격 유형입니다.
사용자 등록은 CSRF 쿠키와 세션 토큰을 포함하여 다음 JSON 페이로드로 등록 엔드포인트에 POST하는 것입니다.
{"first_name":"John","last_name":"Doe","telephone":"099182","email":null,"accept":true}
email 또는 phone 필드 중 하나는 설정되어야 합니다. 둘 다 (구문 검사 외에는) 검증되지 않습니다.
유효한 사용자 세션이 있으면 /corona-app-backend/api/visit 엔드포인트를 통해 방문(룸 체크인)을 생성할 수 있습니다.
방문은 CSRF 쿠키와 세션 토큰을 포함하여 다음 JSON 페이로드로 방문 엔드포인트에 POST하는 것입니다.
{"room":"15-K01","visited_on":"2021-05-09T22:01:00.000Z","exited_on":"2021-05-10T21:59:00.000Z"}')
룸 필드 값은 룸 엔드포인트 /corona-app-backend/api/rooms에서 검색할 수 있는 목록에서 얻을 수 있으며, 이 엔드포인트는 대학의 모든 룸이 담긴 JSON을 전달합니다. 호출이 성공하려면 CSRF 쿠키와 세션 토큰만 있으면 됩니다.
이 문제는 CVE-2021-33840과 비교할 수 있지만 훨씬 더 나아갑니다.
또한 이 애플리케이션은 (https를 통한 전송 암호화를 제외하고) 프론트엔드/백엔드 부분에 어떤 암호화도 포함하고 있지 않습니다. 백엔드는 암호화되지 않은 JSON 데이터를 받고 암호화되지 않은 JSON 데이터를 전달합니다.
완전 자동화된 Perl 언어 익스플로잇 코드는 (무작위 이름 데이터베이스에서) 500명의 사용자를 무작위하지만 유효해 보이는 전화번호와 함께 생성하고, 모든 사용자를 하나의 룸에 체크인합니다. 완전 자동화입니다. 서버에 과부하를 주지 않고 존재할 수 있는 보호 기능을 트리거하지 않기 위해 요청당 5초의 지연을 삽입했습니다. 익스플로잇은 완전 자동으로 성공적으로 실행되었으며, 저는 생성된 가짜 사용자를 포함한 문제를 같은 날 대학에 신고했습니다.
룸을 선택하기 전에 저는 그 룸이 그날 방문되지 않았는지 확인했습니다. 애플리케이션에는 특정 룸에서 접촉한 사람 수를 세는 카운터가 있기 때문에 이것이 가능합니다. 따라서 룸을 방문했을 때 그 카운터가 0이라면 그 시간대에 그 룸에 다른 사람이 없었다는 뜻입니다.
이 애플리케이션은 제가 2021년 4월 12일에 대학에 신고한 CVE-2021-3129의 RCE에도 영향을 받았습니다.
현재 문제는 2021년 5월 31일에 신고되었습니다.
두 신고 모두에 대해 신고한 다음 날 접수 확인 이메일을 받았습니다. 이후 다른 어떤 것도 받지 못했습니다.
애플리케이션의 소스 코드 공개 요청이 진행 중입니다.