한 달 동안 GitHub를 해킹했습니다.

Feb 11 2023
서론 오랜 공백 끝에 새로운 글로 돌아왔습니다. 우리는 일반적으로 다른 약속으로 인해 버그 바운티 프로그램에 참여하지 않지만 한 달 동안 GitHub 해킹에 도전했고 우리의 발견을 공유하게 되어 기쁩니다.

소개

오랜 공백 끝에 새로운 글로 돌아왔습니다. 우리는 일반적으로 다른 약속으로 인해 버그 바운티 프로그램에 참여하지 않지만 한 달 동안 GitHub 해킹에 도전했고 우리의 발견을 공유하게 되어 기쁩니다. 이 모든 것은 Shivam Singh(Mr. Rajput Hacker)이 11월에 제게 연락하여 버그 바운티를 시도하도록 격려하면서 시작되었습니다. 우리는 GitHub의 자회사인 npmjs.com에 집중하기로 했습니다. GitHub가 대기업이고 Bug Bounty 프로그램이 HackerOne에 공개되어 있음에도 불구하고 우리는 시도할 가치가 있다고 느꼈습니다.

정찰

npmjs.com에서 취약점을 찾기 위해 Th3Pr0xyB0y(Vansh Devgan)와 Mr Rajput Hacker(Shivam Singh)는 정찰 작업을 시작했습니다. 사내 제품인 X (CyberXplore 제품군의 일부)를 활용하여 IP 주소, 열린 포트, 스크린샷 및 엔드포인트를 포함하여 가능한 한 많은 정보를 수집했습니다. 클라우드 컴퓨팅의 힘으로 정찰 프로세스가 빠르고 효율적이었습니다.

그러나 수집된 정보를 검토한 결과 대상인 npmjs.com 및 npmjs.org에 대한 공격 범위가 제한적이라는 사실을 알게 되었습니다. 우리의 사내 제품인 X 는 정찰 과정을 수월하게 만들었습니다. 우리는 비공개 베타가 곧 일반 대중에게 제공될 것임을 발표하게 되어 기쁩니다 .

비즈니스 로직에 집중

Mr. Rajput Hacker와 저는 애플리케이션의 비즈니스 로직 버그에만 집중하기로 결정했습니다. 검색을 시작하기 전에 애플리케이션을 완전히 이해했는지 확인했습니다. 여기에는 Burp Suite를 최소한으로 사용하고 응용 프로그램의 핵심 기능과 프로세스를 이해하는 데 중점을 두었습니다. 우리의 목표는 잠재적으로 악용될 수 있는 비즈니스 논리의 약점을 찾는 것이었습니다. 도구 세트를 제한하고 애플리케이션 이해에 집중함으로써 우리는 고유하거나 간과된 취약점을 발견하는 것을 목표로 했습니다. npmjs.com은 비교적 작은 애플리케이션이었기 때문에 이해와 메모를 완료하는 데 2시간도 채 걸리지 않았습니다.

발견된 취약점

보고된 취약점 9개에 대해 언급했지만 오늘은 그 중 3개에 대해 작성하겠습니다.

  1. npmjs.com에서 로그인 확인 우회
  2. npmjs.com에서 사전 계정 탈취
  3. education.github.com의 액세스 제어 문제

설명 -

npmjs.com의 인증 부분과 이메일 주소 업데이트 및 프로필 업데이트 기능과 같은 일반적인 기능을 거치는 동안 이메일 확인 링크, 비밀번호 재설정 링크 및 보낸 링크의 형식인 우리의 눈을 사로잡은 애플리케이션에 대한 이상한 동작을 발견했습니다. 이메일 주소를 업데이트합니다.

링크는 암호 재설정, 이메일 확인 링크 또는 이 사이트의 모든 XYZ 링크와 같은 모든 기능에 대해 https://npmjs.com/verify/{some_random_token_here} 와 같은 형식으로 지정되었습니다. 다음으로, 애플리케이션에 로그인할 때마다 등록된 이메일 주소로 확인 코드가 전송되며 계정에 성공적으로 로그인하려면 로그인 확인 기능(이메일의 2FA/MFA 코드 종류)의 일부로 해당 코드를 입력해야 합니다. . 그런 다음 우리는 이 기능을 우회하려고 시도했고 지난 2시간 동안 애플리케이션을 완전히 사용했기 때문에 성공적으로 우회했습니다. 우리는 각 기능을 알고 있었기 때문에 관련이 있었고 바이패스를 얻었습니다. 그것을했다.

이메일 주소 및 프로필 업데이트와 같은 npmjs.com의 인증 프로세스 및 일반적인 기능을 조사하는 동안 이메일 확인 링크 형식에서 이상한 동작을 발견했습니다. Hacked GitHub for a Month: Here's What We Foundsword 재설정 링크, 이메일 주소를 업데이트하기 위해 전송된 링크. 이러한 링크는 https://npmjs.com/verify/{random_token} 형식으로 지정되었으며 비밀번호 재설정 , 이메일 확인 등을 포함한 모든 기능에 사용되었습니다.

또한 사용자가 애플리케이션에 로그인할 때마다 등록된 이메일 주소로 확인 코드가 전송되는 것을 확인했습니다. 이 확인 코드는 로그인 프로세스를 완료하는 데 필요하며 이중 인증의 한 형태로 작동합니다. 두 번째로 알아차린 것은 npmjs에서 이메일 주소를 업데이트할 때 비밀번호 확인 없이 업데이트 프로세스가 진행된다는 것이었습니다. 이전 이메일 주소와 새 이메일 주소 모두로 이메일이 전송됩니다. 이전 주소로 전송된 이메일은 수신자에게 자신이 변경하지 않은 경우 링크(https://npmjs.com/verify/{some_random_token_here})를 클릭하여 변경 사항을 되돌리고 이전 주소를 만들 수 있음을 알립니다. 현재 것. 새 주소로 전송된 이메일에는 새 이메일을 확인하고 방금 업데이트된 계정에 연결하는 링크가 포함됩니다.

프로필 페이지에서 이메일 주소를 업데이트한 후 계정에 로그인하는 동안 놀라운 문제가 발생했습니다. 이전 또는 새 이메일의 링크를 확인하거나 클릭하지 않았음에도 불구하고 확인 코드가 확인되지 않은 새 주소로 전송되었음을 나타내는 메시지가 시스템에 표시되었습니다. 이것은 우리가 로그인할 수 없다는 것을 암시하는 것 같았습니다. 그러나 자세히 조사한 결과 계정 잠금을 방지하기 위해 변경 사항을 되돌리도록 요청하는 이메일이 이전 주소로 전송된 것을 발견했습니다. 제공된 링크 클릭 시( https://npmjs.com/verify/{random_token}) 이메일을 되돌리기 위해 로그인 페이지로 이동했습니다. 놀랍게도 자격 증명을 입력했을 때 시스템은 확인 코드를 요청하지 않고 대신 로그인하여 이메일 변경 사항을 되돌릴 수 있도록 허용했습니다.

그러나 추가 조사를 통해 이 기능을 성공적으로 우회할 수 있었습니다. 2시간 동안 기능에 익숙해지면서 얻은 응용 프로그램에 대한 깊은 이해를 통해 다양한 기능을 연결하고 우회를 찾을 수 있었습니다. 우회를 재현하는 단계는 아래에서 찾을 수 있습니다.

여기를 클릭하거나 방문하십시오https://blog.cyberxplore.com/we-hacked-github-for-a-month-heres-what-we-found/CyberXplore 블로그 에 게시된 전체 블로그를 읽으려면 .

보안 연구원을 팔로우하는 것을 잊지 마십시오 –

읽어주신 모든 분들께 감사드립니다. 마음에 든다면 박수를 치는 것을 잊지 마세요.

우리를 따르라 -

트위터 → @ MrRajputHacker @ Th3Pr0xyB0y

인스타그램 → @ MrRajputHacker @ vanshdevgan

링크드인 → MrRajputHacker @ th3pr0xyb0y

중간 → @ mrrajputhacker @ th3pr0xyb0y