댓글 달기 == 계정 탈취
마지막으로 공개된 블로그 이후 꽤 오랜 시간이 흘렀습니다. 주로 제가 생각한 테마가 마음에 들지 않았기 때문입니다. 하지만 오늘은 전혀 복잡하지 않지만 사냥꾼으로서 분명하게 발견할 수 있는 멋진 버그인 CVE-2022-3019을 최근에 발견하게 된 과정을 공유하기 위해 왔습니다.
🧐 일부 코드 검토하기
전체 이야기는 hunter의 hacktivity 페이지를 읽는 것으로 시작되었습니다. 이전에는 Low/No Code 앱 빌더를 테스트하는 것에 대해 생각해 본 적이 없으며 그곳에서 흥미로운 보고서를 읽은 후 생각났습니다. 그래서 ToolJet에서 특정 버그인 IDOR부터 시작하여 버그를 찾기로 결정했습니다.
이를 위해 웹 앱의 소스 코드에 액세스할 수 있을 때마다 다음과 같은 요청을 처리하는 모든 루틴이 좋은 IDOR 후보가 될 수 있다고 가정합니다.
function showObject(request)
object = Entity.findOrFail(request.params.id)
return object
IDOR 후보인 이유는 무엇입니까? 이 루틴에 의해 수행되는 유일한 검사는 객체가 존재하는지 여부이기 때문에 인증 검사는 전혀 없습니다. 모든 응용 프로그램이 서비스 기능의 컨텍스트 내에서 권한 부여를 처리하는 것은 아니지만 대부분의 웹 응용 프로그램은 이와 같이 처리하기 때문에 항상 그렇게 간단하지는 않습니다.
이 완벽한 시나리오를 염두에 두고 ToolJet의 컨트롤러 코드로 이동하여 매우 유사한 사례를 찾았습니다. Comments Controller의
getComment()
메서드에는 인증 미들웨어만 있고 그 이후에는 검사가 없습니다. 그래서 계정을 만들고 나면 이론적으로는 내 계정과 같은 테넌트가 아니더라도 임의의 댓글을 읽을 수 있다.Cool, Breno. And this is the part when you report the super duper critical IDOR you just found, right? 🥳
절대 아니다. 내 솔직한 의견으로는 임의의 댓글을 읽는 것이 아무런 영향을 미치지 않기 때문입니다. 일반적으로 우리가 공동으로 무언가를 만들 때 우리가 하는 댓글에는 민감한 정보가 포함되어 있지 않으며, 그럴 경우 공격자가 이해할 수 있는 방식이 아닙니다.
👀 영향을 찾고
따라서 모든 사람의 댓글을 읽는 것 자체는 큰 문제가 아닙니다. 그러나 우리는 그것으로 무엇을 할 수 있습니까?
ToolJet 인스턴스를 실행하고 계정을 만든 다음 주석을 만들고 이 IDOR이 있는 요청을 살펴보고 어떤 데이터가 브라우저로 검색되는지 확인했습니다. 놀랍게도 제가 받은 것은 다음과 같습니다.
IDOR뿐만 아니라 과도한 데이터 노출 사례였습니다! 이메일과 암호 해시가 공개되었고 최악의 경우 암호 재설정 토큰도 유출되었습니다! 😱
그 순간에 이 토큰 속성은 null 값을 가지고 있었지만, 이것은 다음과 같이 생각하게 했습니다.
what if I, as another user, pick up the email value and use it in the "forgot password?" page? Maybe it'll generate a token that I can see with this comment endpoint
. 그리고 그것이 내가 시도한 것입니다.새 계정을 만들고 댓글에 액세스하고 거기에서 첫 번째 계정의 이메일을 받고 "비밀번호 찾기"페이지로 이동하여 해당 이메일을 붙여넣은 다음 다시 댓글에 액세스하고 붐! 생성된 암호 재설정 토큰이 있었습니다! 🥳
이때부터 생성된 토큰으로 비밀번호 재설정 url에 접속만 하면 1차 사용자 비밀번호 변경, 사칭 가능 🕵️
💡 최종 생각
저는 이 발견이 정말 마음에 들며, 우리가 테스트할 수 있는 새로운 종류의 앱을 보여주는 공개 보고서가 아니었다면 아마 결코 발견하지 못했을 것입니다. 일부 버그 바운티 플랫폼에는 이러한 놀라운 핵티비티 페이지가 있지만 YouTube 동영상, 블로그, 기사 등에서도 이러한 멋진 것들을 발견할 수 있습니다. 따라서...항상 공개적으로 사용할 수 있는 콘텐츠를 흡수하려고 노력하면 가치가 있는 경향이 있습니다 🤗
또한 전체 테스트는 간단한 코드 검토로 시작했는데, 오픈 소스 소프트웨어에서 버그를 찾을 때 일반적으로 시도하는 것입니다. 관심 있는 것이 있다면 API에서 버그를 찾을 때 찾을 수 있는 몇 가지 멋진 내용이 포함된 이 시리즈가 있습니다. 몇 가지 주제에 의사 코드 예제( 및 참조)가 포함되어 있지만 실제 실행 중인 애플리케이션에서 테스트할 수 있는 다른 항목도 있습니다!
🤗 시간을 내어 읽어주셔서 감사합니다!
Reference
이 문제에 관하여(댓글 달기 == 계정 탈취), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/therealbrenu/commenting-account-takeover-c54텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)