Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
lago-invite-ato — Lago GraphQL acceptInvite 인증 우회를 시연하는 개념 증명 랩으로, 인증되지 않은 초대 수락을 통해 조직 간 계정 탈취가 가능합니다. | Kitploit
도구/GitHubGitHub/abraxas/lago-invite-ato
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingAuthenticationAPI SecurityLabs & Practice
GitHubabraxas/lago-invite-ato

lago-invite-ato

Lago GraphQL acceptInvite 인증 우회를 시연하는 개념 증명 랩으로, 인증되지 않은 초대 수락을 통해 조직 간 계정 탈취가 가능합니다.

저장소 보기
1115일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Abraxas Labs - lago-invite-ato

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  lago-invite-ato

lago-invite-ato

Lago v1.53.0 - GetLago

Mutations::Invites::Accept에는 AuthenticableApiUser가 없습니다. Create/revoke에는 있습니다. Accept에는 없습니다. register_from_invite는 초대 이메일로 사용자를 로드합니다. 해당 계정에 이미 멤버십이 있으면 게시된 비밀번호는 폐기됩니다. AuthToken.encode(user:)는 여전히 실행됩니다. JWT는 사용자 범위입니다. org 클레임이 없습니다. 클라이언트는 해당 사용자가 이미 속한 org에 대해 x-lago-organization을 전송합니다. 피해자의 org도 포함됩니다. createInvite는 이미 초대자에게 토큰을 반환합니다.

cfo@victim을 일회용 org에 초대하고, 직접 수락하면, 해당 이메일이 이미 속한 모든 org에서 그 사람이 됩니다. 메일함은 관여하지 않습니다. 피해자 비밀번호는 변경되지 않습니다.

ID아직 CVE 없음
CWECWE-287, CWE-306
CVSSCritical: 9.6 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N
제품Lago / lago-api
영향 범위v1.53.0까지 email/password acceptInvite
인증org admin (organization:members:create); Cloud 가입만으로 충분
라이선스GNU Affero GPL v3.0
랩127.0.0.1 전용

공격자가 할 수 있는 일

공격자가 제어하는 org가 필요합니다. Cloud 가입만으로 충분합니다(LAGO_DISABLE_SIGNUP은 기본값 false). 피해자 이메일을 초대하고, 더미 비밀번호로 인증 없이 수락한 다음, 헤더를 Victim Corp로 전환합니다. 인보이스, API 키, Stripe, 지갑.

계정이 없는 무작위 방문자가 아닙니다. 비밀번호 재설정도 아닙니다. 더미 로그인은 실패합니다. 실제 피해자 비밀번호는 여전히 작동합니다. Google/Okta accept는 IdP 이메일을 바인딩하며 이 버그가 아닙니다. DB에 다른 사람의 이메일이 없는 단일 org 셀프호스팅은 다른 판매자를 제공하지 않습니다. 동일한 데이터베이스, 두 개의 org, 동일한 이메일: 그렇다면 제공합니다.

Stripe 일회성 인보이스 IDOR과 동일한 트리입니다. 다른 버그입니다.

발견 방법

Accept(AuthenticableApiUser 없음)를 읽고, find_or_initialize_by(email:)를 읽고, 비밀번호를 건너뛰는 멤버십 존재 분기를 읽고, AuthToken.encode(user:)를 읽었습니다. 그런 다음 Google accept를 읽었는데, 이는 google_oidc["email"] == invite.email을 확인합니다. Email/password accept는 기존 사용자의 비밀번호를 바인딩하지 않습니다.

이것을 처음 보는 클라이언트는 사용되지 않은 주소를 초대하고, 수락하고, 게시한 비밀번호로 완전히 새로운 Lago 사용자를 얻게 됩니다. 그것이 기능입니다. 증거는 기존 피해자 사용자 id가 반환되는 것입니다.

이미 기록된 잘못된 방향: Google/Okta로 수락; JWT 없는 createInvite 401을 전체 이야기로 취급(create는 인증됨, accept는 아님); currentUser에서 공격자 org만 보기(단서는 목록의 Victim Corp); 더미 비밀번호 로그인(그것은 해시가 덮어쓰여졌다는 의미 - 랩은 그렇지 않다고 단언); 리버스 셸. 연극. 받은편지함 없음.

그런 다음: 두 번의 registerUser 호출로 Victim Corp와 Attacker Corp를 심습니다. 매 실행마다 새 이메일을 사용하여 더러운 볼륨이 user_already_exists 422를 발생시키지 않도록 합니다. 피해자 이메일에 createInvite. 더미 비밀번호로 인증 없는 acceptInvite. 반환된 사용자 id가 피해자와 일치. currentUser.organizations에 둘 다 나열됨. 헤더 전환이 Victim Corp를 반환.

랩

cd lab
./run.sh

오직 http://127.0.0.1:13000만 대상으로 합니다. Stripe IDOR은 13001을 사용했습니다. UI 포트 없음.

IOC victim_password_unchanged
IOC victim_real_password_still_works
SUCCESS LAGO-INVITE-ATO acceptInvite JWT is existing victim; lists Victim Corp; no inbox

수정

사용자가 이미 존재하면, 멤버십을 연결하기 전에 본인으로 인증(또는 메일박스 / IdP 증명)을 요구하십시오. 인증 없는 accept에서 기존 사용자에 대한 JWT를 발급하지 마십시오. 초대 token이 capability라면 초대자에게 반환하는 것을 중단하십시오.

참고

  • github.com/getlago/lago 태그 v1.53.0 · lago-api
  • accept.rb · accept_service.rb · users_service.rb · create.rb · object.rb · google_service.rb
  • 동일 제품: lago-stripe-invoice-idor
  • CWE-287 · CWE-306

라이선스

GNU Affero GPL v3.0. LICENSE 참조. 루프백 랩 전용. 보증 없음.

도구 다운로드