eMudhra 1FA OTP 로그인 우회: 공개 RSA 키와 속도 제한 부재가 흐름을 깨뜨린 이유
한 문단으로 요약한 우회 방법
catgirl.cloud Mastodon 인스턴스에서 @49016으로 활동하는 한 연구원이 eMudhra의 1FA OTP 로그인 시스템을 완전히 우회하는 방법을 시연했습니다. eMudhra가 브라우저에 제공하는 RSA 공개 키를 추출하여 자신의 OTP 요청을 암호화한 다음 OTP 검증 엔드포인트를 무차별 대입(brute-force)한 것입니다. 게시물에 따르면 데모 영상에서 무차별 대입 속도를 높이지 않았으며, 공격자는 Cloudflare Turnstile을 한 번만 통과하면 된다고 합니다. 주장된 결과는 OSINT를 통해 이메일 주소를 찾을 수 있는 모든 eMudhra 인증서 보유자의 계정 탈취입니다.
eMudhra의 OTP 흐름이 실제로 하는 일
eMudhra의 로그인 흐름은 서버로 보내기 전에 OTP 페이로드를 클라이언트 측에서 RSA 공개 키로 암호화합니다. 공개 키는 브라우저에 제공되는 JavaScript에 포함되어 있으므로 어떤 의미에서도 비밀이 아닙니다. 로그인 페이지를 로드하는 사람은 누구나 읽을 수 있습니다. 게시물은 키를 그대로 게시합니다:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7/OR1az+yTKt1ZONkk+T
owML34smGCo8evpk4zLCsrc+LXtX20yERombX4xh2Sd3VDFML2LuOavB3PwGFfL0
Qr+gGPomq23nqaX9nr5SeSTpFbrxsEEVdipXXpucTFFhnzye7Y7ZodHNQSjUqQPu
L6ktk/YkP0B6k5lIMT//W/4gB3yU1UGCLcSvdMQJo5+I7OdIGxQbir4rtXpdm8qP
3pblFPJXcHc2urBHvJvatUpq/rY0Km4Cxz5ZJwM7MW/hxSRpiTXNoE58W8DHEQVq
ln7RDh0Cc7lA0Qvm92NJIohbi4KZzmq81UA2MyHwyxtkykQxRFO1gEU5i/dp/I5D
ZQIDAQAB
-----END PUBLIC KEY-----
공개된 공개 키로 클라이언트 측 암호화를 하는 것은 일반적인 패턴입니다. 그 목적은 요청 본문을 중간자(이 경우 Cloudflare)로부터 불투명하게 유지하는 것이지 클라이언트를 인증하는 것이 아닙니다. Hacker News의 한 댓글 작성자 ignatella가 말했듯이:
그들은 공개 키를 js에 넣고 요청 본문을 암호화합니다. 이는 프록시(이 경우 Cloudflare)가 사용자의 중요한 데이터에 접근하는 것을 방지하기 위한 일반적인 관행이며 괜찮습니다.
실제 버그는 키가 아니라 검증 엔드포인트입니다
취약점은 공개 키가 공개되어 있다는 사실이 아닙니다. 취약점은 OTP 검증 엔드포인트가 무제한 추측을 허용한다는 것입니다. OTP 공간이 작기 때문에 요청을 자유롭게 제출할 수 있는 공격자는 이를 열거할 수 있습니다. 같은 댓글 작성자가 실패를 정확하게 요약했습니다:
하지만 실제 버그는 OTP 확인 관련 엔드포인트에 속도 제한, 무효화, 또는 보호가 없어서 무차별 대입이 가능하다는 것입니다. 검색 공간이 제한적이기 때문입니다.
Cloudflare Turnstile은 해당 엔드포인트 앞에 있는 유일한 관문이며, 게시물에 따르면 공격 세션당 한 번만 해결하면 된다고 합니다. Turnstile은 봇 탐지 계층이지 권한 부여 제어가 아니므로 이미 통과한 클라이언트가 만들 수 있는 OTP 추측 횟수를 제한하지 않습니다.
공격이 얼마나 빠른지
연구원은 데모 영상에서 보여준 무차별 대입이 속도를 높인 것이 아니며 "그 정도로 빠르다"고 특징지었습니다. 게시물은 또한 공격자가 Cloudflare Turnstile을 한 번만 통과하면 된다고 언급합니다. 원본 자료에는 초당 특정 요청 수치가 나와 있지 않으므로 정확한 처리량은 게시물 자체에서 확인되지 않습니다.
주장된 영향: 기존 eMudhra 인증서 탈취
게시물의 가장 심각한 주장은 우회가 단일 계정에 국한되지 않는다는 것입니다. 작성자는 "이메일을 OSINT로 찾아서 로그인하면 기본적으로 기존 eMudhra 인증서를 훔칠 수 있다"고 씁니다. 즉, 공격 체인은 다음과 같습니다: 오픈소스 정보를 통해 대상의 이메일 주소를 찾고, 해당 계정에 OTP를 트리거한 다음, 코드를 무차별 대입하고 로그인합니다.
Hacker News의 댓글 작성자 buildbot이 명백한 후속 질문을 던졌습니다:
그러니까 이 CA를 사용한 사람은 누구나 이메일을 알면 끝나는 거야?
그 질문은 원본 자료에서 결정적으로 답변되지 않습니다. 게시물은 능력을 주장할 뿐, 계정별 성공률이나 확인된 침해 목록을 공개하지 않습니다.
원본의 주의사항 및 미해결 세부 사항
논의에서 몇 가지 세부 사항은 매끄럽게 넘어가기보다 지적할 가치가 있습니다:
- 데모의 숫자 불일치. 댓글 작성자 hoherd가 관찰했습니다: "도구가 찾은 숫자는 1861이었습니다. 이메일로 받은 OTP 코드는 1858이었습니다. 내가 놓친 게 뭐지?" 원본은 이를 해결하지 않으므로 데모의 정확한 출력은 완전히 검증된 것으로 취급해서는 안 됩니다.
- 설명되지 않은 이전 사건. 게시물은 독자들이 "
4사건 이후"에도 eMudhra를 신뢰하는지 묻는 것으로 시작합니다. 원본 자료는 그 사건이 무엇인지 설명하지 않습니다. - 주장의 범위. 우회는 1FA OTP 로그인 경로에 대해 설명됩니다. 게시물은 인증 기관의 서명 인프라나 RSA 개인 키의 침해를 주장하지 않으며, "유출된 CA 인증서 키"와 명확히 대조합니다.
맥락: CA 시장에서 eMudhra의 위치
Hacker News의 댓글 작성자 jttnr가 별도의 토론을 링크하며 썼습니다: "오, 그들이 CA 사업을 떠나는 게 다행이네요." 또 다른 작성자 FLeXMurphy는 "보안은 그들의 사업의 1% 미만을 차지한다"고 댓글을 달았습니다. 이는 게시물 자체의 진술이 아니라 댓글 작성자의 평가이지만, 이 공개가 왜 그렇게 큰 반향을 일으켰는지 설명해 줍니다.
이런 종류의 버그가 계속 발생하는 이유
세 가지 설계 결정이 결합되어 이러한 실패 모드를 만들며, 각각은 독립적으로 피할 수 있습니다:
- 공개 키를 신뢰 경계로 취급. 클라이언트 JavaScript에 포함된 키로 요청 본문을 암호화하는 것은 수동적 중간자로부터 보호합니다. 발신자를 인증하지 않으며 접근 제어로 의존해서는 절대 안 됩니다.
- 서버 측 시도 제한이 없는 짧은 숫자 OTP. 6자리 또는 이와 유사한 작은 코드 공간은 서버가 실패한 시도에 대한 엄격한 상한을 적용하고, 코드를 빠르게 만료시키며, 첫 사용 후 코드를 무효화할 때만 안전합니다.
- 봇 완화가 속도 제한을 대신함. CAPTCHA 또는 Turnstile 챌린지는 공격을 시작하는 비용을 높입니다. 계속하는 비용을 높이지는 않습니다.
OTP 로그인을 운영하는 모든 사람을 위한 실용적 교훈
- 계정, IP, 세션별로 OTP 검증에 속도 제한을 두고, 소수의 실패 후 계정을 잠그거나 재인증을 요구하세요.
- OTP를 적극적으로 만료시키고 첫 성공적 사용 후 무효화하세요.
- 공개된 키에 대한 클라이언트 측 암호화를 요청이 합법적이라는 증거로 취급하지 마세요.
- CAPTCHA와 Turnstile을 자동화 방지 마찰로 취급하고 권한 부여 경계로 취급하지 마세요.
- 검증 시도량을 기록하고 알림을 설정하세요. 이는 이 공격을 즉시 표면화했을 신호입니다.
커뮤니티 반응
Hacker News 스레드(155점, 46개 댓글)는 경보와 암흑 유머가 섞였습니다. 댓글 작성자들은 우회가 eMudhra 인프라의 모든 계정에 로그인할 수 있는지(tommica)와 CA의 모든 사용자가 노출되었는지(buildbot) 물었습니다. 다른 이들은 농담을 던졌습니다 — baal80spam은 "eMudhra의 'S'는 'Secure'를 의미한다"고 썼고, cyberpunk은 분위기를 "인터넷을 화나게 하지 마세요, 결과가 따를 것입니다"로 요약했습니다.
호스팅 사이트에 관한 별도의 댓글 스레드도 있었습니다. bragr와 gilrain 모두 Mastodon 인스턴스에서 이해할 수 없는 텍스트가 제공되었다고 보고했으며, gilrain은 이를 안티 스크래핑 시스템 때문이며 반복 방문 시 연결이 재설정된다고 설명했습니다. 이것은 글의 전달 문제이지 취약점에 관한 사실이 아닙니다.
요약
한 연구원이 eMudhra의 1FA OTP 로그인을 완전히 우회하는 방법을 시연했습니다. 사이트 자체의 RSA 공개 키를 재사용하여 OTP 요청을 위조하고, 게시물에 따르면 단일 Cloudflare Turnstile 챌린지 뒤에 속도 제한이 없는 검증 엔드포인트를 무차별 대입한 것입니다.
제목
eMudhra 1FA OTP 로그인 우회: 공개 RSA 키와 속도 제한 부재가 흐름을 깨뜨린 이유