웹 코딩 보안 회사인 SALT의 연구원들은 그들이 어떻게 웹 코딩 보안을 발견했는지에 대한 흥미로운 설명을 발표했습니다. 인증 버그 더빙 된 CVE-2023-28131 Expo로 알려진 인기있는 온라인 앱 빌드 툴킷에서.
좋은 소식입니다 엑스포 응답 SALT의 책임 있는 공개 후 불과 몇 시간 내에 수정 사항이 제공됩니다.
다행스럽게도 패치는 Expo의 클라우드 서비스 내에서 구현되었고 사전 설치된 앱이나 클라이언트 측 코드에 대한 패치가 필요하지 않았기 때문에 수정 사항은 고객이 아무것도 다운로드하는 데 의존하지 않았습니다.
엑스포 자문 발생한 일과 회사가 이를 수정한 방법을 설명했을 뿐만 아니라 고객에게 다른 온라인 서비스에서 이러한 종류의 가능한 취약점을 피하는 방법에 대한 프로그래밍 조언을 제공했습니다.
그런 다음 SALT는 가능한 한 빨리 홍보 목적으로 보고서를 서두르지 않고 보고서를 게시하기 전에 XNUMX개월을 기다렸습니다. 따라서 Expo 사용자는 Expo의 응답을 소화하고 조치를 취할 수 있는 기회를 얻었습니다.
간단 유지
버그가 있는 인증 프로세스는 에서 자세히 설명합니다. SALT의 보고서, 하지만 여기에서는 Expo의 OAUTH 서비스에서 무엇이 잘못되었는지에 대해 매우 단순화된 설명을 제시할 것입니다.
OAUTH, 짧은 개방형 인증 프레임워크는 암호를 설정하지 않고도 온라인 서비스(예: 온라인 프로필 편집, 새 블로그 기사 추가 또는 소셜 미디어 게시물 작성을 위한 웹 서비스 승인)의 개인 데이터에 액세스할 수 있는 프로세스입니다. , 또는 해당 서비스 자체에 직접 로그인합니다.
제공하는 웹 서비스를 볼 때 Google 또는 Facebook으로 로그인 예를 들어, 거의 항상 백그라운드에서 OAUTH를 사용하므로 다른 웹사이트에서 새 사용자 이름과 새 비밀번호를 만들거나 다른 온라인 서비스에 전화번호를 제공할 필요가 없습니다.
엄밀히 말하면 Google 또는 Facebook 자격 증명을 해당 사이트 중 하나에만 입력하여 간접적으로 인증합니다.
일부 사용자는 관련 없는 다른 사이트에 자신의 신원을 증명하기 위해 Google 또는 Facebook에 인증하는 것을 원하지 않기 때문에 이를 좋아하지 않습니다. 다른 사람들은 Facebook 및 Google과 같은 사이트가 자체 암호화 보안 프로세스를 구성하려고 시도한 부티크 웹 사이트보다 로그인 프로세스 처리, 암호 해시를 안전하게 저장 및 2FA 수행에 더 많은 경험이 있다고 가정하기 때문에 이를 좋아합니다.
아웃소싱 인증
매우 단순화된 OAUTH 스타일의 로그인으로 Facebook 계정을 통해 example.com
, 다음과 같이 진행됩니다.
- 사이트
example.com
앱이나 브라우저에 말합니다. "안녕하세요, X, 가서 Facebook에서 이 사이트에 대한 매직 액세스 토큰을 받으세요." - 특별한 Facebook URL을 방문하여 아직 로그인하지 않은 경우 로그인합니다. "에 대한 매직 액세스 토큰을 주세요.
example.com
. " - Facebook이 귀하가 주장하는 사람임을 만족하는 경우, "Hello, X, 여기 당신의 매직 액세스 토큰이 있습니다."라고 대답합니다.
- 당신은 액세스 토큰을 건네
example.com
, 그런 다음 Facebook 자체에 연락하여 토큰의 유효성을 검사할 수 있습니다.
필요한 경우 Facebook만이 귀하의 Facebook 비밀번호와 2FA 코드를 볼 수 있으므로 Facebook 서비스는 귀하와 귀하 사이의 인증 브로커 역할을 합니다. example.com
.
이면에는 다음과 같은 최종 검증이 있습니다.
- 사이트
example.com
페이스북에 말한다. "이 토큰을 발행했으며 사용자 X를 검증합니까?" - 페이스북이 동의하면 그것은 말한다
example.com
, "예, 이 사용자를 인증된 것으로 간주합니다."
가역 시퀀스
SALT 연구원이 Expo 코드에서 발견한 버그는 "인증 중개" 프로세스라고 부를 수 있는 Expo의 처리를 악의적으로 파괴함으로써 발생할 수 있습니다.
요점은 다음과 같습니다.
- 엑스포 자체는 확인 프로세스에 래퍼를 추가합니다. 인증 및 유효성 검사를 처리하고 궁극적으로 원하는 웹 사이트에 대한 매직 액세스 토큰을 전달합니다(
example.com
위의 교환에서) 연결하려는 앱 또는 웹사이트로 다시 돌아갑니다. - 확인 처리에 사용되는 매개변수 Expo 서비스에 제출되는 큰 URL에 압축됩니다.
- 이러한 매개변수 중 하나는 웹 쿠키에 임시로 저장됩니다. 액세스를 활성화하기 위해 최종 매직 보안 토큰이 전송될 URL을 지정합니다.
- 보안 토큰이 전달되기 전에, 인증될 URL을 확인하라는 팝업이 표시되므로 가짜 URL을 로그인 프로세스로 대체하려는 사람을 잡을 수 있습니다.
- 팝업을 승인하면 Expo는 Facebook 인증 프로세스로 리디렉션합니다.
- 페이스북이 인증을 승인하면, Expo 서비스에 매직 액세스 토큰을 반환하고 Expo는 이를 팝업에서 방금 승인한 URL로 전달합니다.
returnURL
. - 지정된 위치에서 수신하는 앱 또는 웹사이트
returnURL
Expo의 콜백을 받고, 액세스 토큰을 획득하므로 귀하로 인증됩니다.
안타깝게도 SALT 연구원은 JavaScript 코드를 사용하여 초기 Expo 로그인 URL에 대한 액세스를 트리거한 다음 사용자가 직접 읽거나 승인하기 전에 확인 팝업을 종료함으로써 로그인 프로세스를 파괴할 수 있음을 발견했습니다.
그러나이 시점에서 Expo의 서비스는 이미 이름이 지정된 쿠키를 설정했습니다. ru
( returnURL
) 마지막에 매직 액세스 토큰으로 콜백할 위치를 알려줍니다.
이것은 사이버 범죄자가 Expo의 코드를 속여 "기억"할 수 있음을 의미했습니다. returnURL
등 https://roguesite.example
, 실수로 승인하는 것은 고사하고 공격이 진행 중임을 경고하는 대화 상자를 본 적이 없습니다.
그런 다음 연구원들은 JavaScript 코드의 두 번째 덩어리를 사용하여 Expo의 Facebook 확인 프로세스로의 리디렉션을 시뮬레이션했습니다. 이는 (많은 사람들과 마찬가지로) 이미 Facebook 자체에 로그인한 경우 자동으로 성공합니다.
Facebook의 검증은 Expo 로그인 프로세스를 다시 Expo의 자체 JavaScript 코드로 리디렉션합니다…
...믿을 수 있지만 실제로는 확인되지 않은 데이터를 잘못 returnURL
그 마법의 콜백을 위해 ru
귀하의 승인이나 인지 없이 시작 시 설정한 쿠키입니다.
페일오픈 또는 페일클로즈?
위의 설명에서 알 수 있듯이 이 취약점은 Expo의 코드가 부적절하게 실패하여 발생했습니다.
인증 코드는 일반적으로 페일 클로즈, 전문 용어로, 어떤 종류의 활성 승인 신호가 표시되지 않는 한 프로세스가 성공하지 않아야 함을 의미합니다.
우리는 Expo가 시스템이 페일오픈, SALT의 보고서에 팝업 승인 대화 상자가 다음과 같이 표시되어 있는 경우:
https://roguesite.example의 앱에서 Facebook 계정에 로그인하라는 메시지가 표시됩니다. https://roguesite.example을 완전히 신뢰하고 허용하는 데 동의하십니까? [아니요] [예]
예상대로 기본 답변은 다음과 같이 설정되었습니다. [No]
, 그러나 이는 확인 프로세스를 제어하기 위해 Expo의 자체 클라이언트 측 코드를 종교적으로 사용한 경우에만 시스템이 닫히지 않도록 합니다.
일련의 확인 요청을 실행하기 위해 자체 JavaScript를 제공함으로써 연구자들은 승인 대화 상자를 다음과 같이 처리할 수 있었습니다.
https://roguesite.example이 Facebook 계정을 통한 로그인을 차단하도록 명시적으로 지정하지 않으면 차단하도록 허용합니다. [허용] [차단]
다른 변경 사항 중에서도 해결책은 Expo의 초기 로그인 코드가 마법을 설정하는 것이었습니다. ru
쿠키 귀하가 명시적으로 승인한 후에만 returnURL
, 확인 팝업을 건너뛰면 Expo의 최신 JavaScript 로그인 코드가 닫히지 않도록 합니다. 한 번도 보지 않았거나 승인한 적이 없는 URL을 맹목적으로 신뢰하는 대신입니다.
여러 면에서 이 버그는 벨킨 위모 스마트 플러그 Belkin 사례의 근본 원인은 로그 웹 콜백이 아니라 버퍼 오버플로였음에도 불구하고 우리가 약 XNUMX주 전에 작성한 버그입니다.
Belkin의 코드는 서버 측 코드에 68바이트 메모리 버퍼를 할당했지만 68바이트 이상을 보내려고 시도하지 않은 클라이언트 측 코드의 체크인에 의존하여 서버를 결정한 공격자의 자비에 맡겼습니다. 확인 프로세스를 우회한 자체 클라이언트 측 코드를 사용하여 서버와 통신합니다.
무엇을해야 하는가?
- 버그를 보고하고 작성할 때, SALT를 따르는 것을 고려하십시오 예. 다른 사람이 자신의 악용을 만들 수 있는 세부 정보를 게시하기 전에 벤더에게 취약성을 수정할 합당한 시간과 자체 사용자에게 조언할 합당한 시간을 제공하여 책임감 있게 공개합니다.
- 버그 리포트를 받을 때, 엑스포를 따르는 것을 고려하십시오 예. 신속하게 응답하고, 버그 보고자와 계속 연락하고, 가능한 한 빨리 취약점을 패치하고, 사용자에게 유용한 조사 보고서를 제공하고, 객관성을 유지하십시오. ("보안을 심각하게 생각한다"고 자신을 칭찬하거나 중요하지 않은 문제로 일축하라는 마케팅 팀의 제안에 저항하십시오. 응답의 신속성 및 타당성과 위험에 대한 자체 평가에 따라 사용자가 결정합니다.)
- 인증 코드가 닫히지 않았는지 확인하십시오. 단순히 무시하거나 취소함으로써 무효화될 수 있는 확인 또는 승인 단계가 없는지 확인하십시오.
- 자신의 클라이언트 측 코드가 확인 프로세스를 제어할 것이라고 가정하지 마십시오. 공격자가 프로토콜을 리버스 엔지니어링하고 가능한 한 많은 검사를 우회하기 위해 자체 클라이언트 코드를 생성한다고 가정합니다.
- 적극적으로 사용하지 않는 웹 계정에서 로그아웃합니다. 많은 사람들이 Google, Amazon, Facebook, Apple 등과 같은 계정에 로그인한 다음 편리하기 때문에 무한정 로그인 상태를 유지합니다. 로그아웃하면 예상하지 못한 많은 작업(인증, 게시물, 좋아요, 공유 등 포함)이 발생하지 않습니다. 대신 로그인 프롬프트가 표시됩니다.
가능할 때마다 웹 서비스에서 로그아웃하고 모든 브라우저 쿠키와 저장된 웹 데이터를 자주 지우면 탐색할 때 사이트에서 수집할 수 있는 추적 정보의 양도 줄어듭니다.
결국 로그인하지 않고 이전의 추적 쿠키가 남아 있지 않으면 사이트는 더 이상 사용자가 누구인지 또는 마지막으로 방문했을 때 무엇을 했는지 정확히 알 수 없습니다.
- SEO 기반 콘텐츠 및 PR 배포. 오늘 증폭하십시오.
- PlatoAiStream. Web3 데이터 인텔리전스. 지식 증폭. 여기에서 액세스하십시오.
- 미래 만들기 w Adryenn Ashley. 여기에서 액세스하십시오.
- PREIPO®로 PRE-IPO 회사의 주식을 사고 팔 수 있습니다. 여기에서 액세스하십시오.
- 출처: https://nakedsecurity.sophos.com/2023/05/30/serious-security-verification-is-vital-examining-an-oauth-login-bug/
- :있다
- :이다
- :아니
- :어디
- $UP
- 1
- 15%
- 2FA
- a
- 할 수 있는
- 소개
- 위의
- 절대
- ACCESS
- 계정
- 계정
- 인수
- 행동
- 행위
- 활동적인
- 활발히
- 행위
- 첨가
- 추가
- 조언
- 조언
- 후
- ...전에
- All
- 할당
- 수
- 수
- 혼자
- 이미
- 또한
- 항상
- 아마존
- 중
- 양
- an
- 와
- 다른
- 답변
- 어떤
- 누군가
- 아무것도
- 앱
- Apple
- 승인
- 승인
- 인가 된
- 앱
- 있군요
- 약
- 기사
- AS
- 평가
- At
- 공격
- 인증
- 인증 된
- 인증
- 저자
- 인정 받은
- 권한 부여
- 자동
- 자동적으로
- 피하기
- 뒤로
- 배경
- 배경 이미지
- 기반으로
- BE
- 때문에
- 된
- 전에
- 사이에
- 큰
- 맹목적으로
- 블록
- 블로그
- 경계
- 바닥
- 브로커
- 브라우저
- 브라우저 쿠키
- 버퍼
- 버퍼 오버 플로우
- 곤충
- 버그
- 비자 면제 프로그램에 해당하는 국가의 시민권을 가지고 있지만
- by
- 전화
- 라는
- CAN
- 케이스
- 잡아라
- 원인
- 발생
- 센터
- 기회
- 변경
- 확인
- 확인하는 것이 좋다.
- 청구
- 청소
- 클라이언트
- 닫은
- 클라우드
- 암호
- 코딩
- 수집
- 색
- 오는
- 회사
- 연결
- 고려
- CONTACT
- 제어
- 편리한
- 쿠키
- 쿠키
- 수
- 엄호
- 만들
- 신임장
- cryptographic
- 고객
- 사이버범죄
- 데이터
- 결정하다
- 결정된
- 태만
- 전달
- 설명
- 원하는
- 세부 묘사
- 세부설명
- 다이얼로그
- DID
- 요람
- 직접
- 드러내다
- 폭로
- 알림닫기
- 디스플레이
- do
- 하지
- 하기
- 돈
- 말라
- 더빙 된
- 편집
- 그렇지 않으면
- 가능
- end
- 조차
- EVER
- 정확하게
- 검사
- 예
- 교환
- 기대
- 경험
- 설명
- 공적
- 전시회
- 페이스북
- 실패
- 실패
- 실패
- 매혹적인
- 를
- 최후의
- 수정
- 고정
- 수행원
- 다음
- 럭셔리
- 발견
- 자주
- 에
- 충분히
- 일반적으로
- 얻을
- 주기
- 주어진
- 기부
- Go
- 간다
- 좋은
- 구글
- 잡아요
- 매우
- 했다
- 손
- 처리
- 처리
- 일이
- 무슨 일이
- 있다
- 신장
- 도움이
- 여기에서 지금 확인해 보세요.
- 진료 시간
- 가져가
- 방법
- How To
- 그러나
- HTTPS
- 통합 인증
- if
- 구현
- in
- 포함
- 간접적으로
- 정보
- 처음에는
- 를 받아야 하는 미국 여행자
- 의도
- 으로
- 조사
- 발행물
- IT
- 그
- 그 자체
- 특수 용어
- 자바 스크립트
- 다만
- 유지
- 키
- 뜨다
- 알아
- 지식
- 알려진
- 성
- 후에
- 출발
- 왼쪽 (left)
- 처럼
- 청취
- ll
- 로그인
- 로깅
- 로그인
- 이상
- 보고
- 마법
- 확인
- .
- 많은 사람
- 한계
- 마케팅
- 최대 폭
- 의미
- 의미
- 미디어
- 메모리
- 수도
- 잘못
- 개월
- 배우기
- 많은
- 이름
- 필요
- 필요
- 못
- 신제품
- news
- 아니
- 표준
- 번호
- 맹세
- 목표
- of
- 오프
- 제공
- 제공
- on
- ONE
- 온라인
- 만
- 열 수
- 선택권
- or
- 기타
- 기타
- 아웃
- 위에
- 자신의
- 포장
- 매개 변수
- 패스
- 통과
- 비밀번호
- 패치
- 패치
- 폴
- 사람들
- 전화
- 플라톤
- 플라톤 데이터 인텔리전스
- 플라토데이터
- ...을 더한
- 포인트 적립
- 전철기
- 인기 문서
- 위치
- 가능한
- 게시물
- 제시
- 방지
- 사설
- 방법
- 프로세스
- 프로필
- 프로그램 작성
- 프로토콜
- 증명
- 제공
- 널리 알려짐
- 출판
- 출판
- 목적
- 입고
- 빨리
- 차라리
- 읽기
- 정말
- 합리적인
- 수신
- 전수
- 리디렉션
- 감소
- 의지하다
- 댓글
- 신고
- 신고자
- 통계 보고서
- 보고서
- 요청
- 필요
- 연구원
- 응답
- 책임
- 반품
- 연락해주세요
- 위험
- 뿌리
- 달리기
- 말했다
- 소금
- 만족
- 라고
- 라고
- 장면
- 둘째
- 안전하게
- 보안
- 보안 토큰
- 참조
- 보고
- 본
- 보고
- 보내다
- 전송
- 순서
- 진지한
- 서비스
- 서비스
- 세트
- 설정
- 공유
- 짧은
- 영상을
- 쇼
- 기호
- 비슷한
- 단순화
- 간단히
- 대지
- 사이트
- 스마트 한
- So
- 사회적
- 소셜 미디어
- 소셜 미디어 게시물
- 고체
- 해결책
- 일부
- 무언가
- 예정입니다.
- 말하기
- 특별한
- 지정
- 스타트
- 유지
- 단계
- 저장
- 제출
- 성공
- 이러한
- 공급
- SVG
- 체계
- 이야기
- 이야기
- 말하다
- 보다
- 그
- XNUMXD덴탈의
- 그들의
- 그들
- 그때
- 따라서
- Bowman의
- 그들
- 이
- 그
- 그래도?
- 세
- 시간
- 에
- 토큰
- 툴킷
- 상단
- 추적
- 전이
- 투명한
- 치료
- 시도
- 트리거
- 방아쇠를 당긴
- 믿어
- 신뢰
- 시도
- 회전
- 두
- 궁극적으로
- 아래에
- ...에
- URL
- us
- 익숙한
- 사용자
- 사용자
- 사용
- 유효 기간
- 확인
- 공급 업체
- 확인
- 확인
- 를 통해
- 방문
- 방문
- 필수
- 취약점
- 필요
- 였다
- 방법..
- 방법
- we
- 웹
- 웹 서비스
- 웹 사이트
- 주
- 갔다
- 했다
- 뭐
- 언제
- 때마다
- 어느
- 누구
- 의지
- 과
- 이내
- 없이
- 겠지
- 쓰기
- 잘못된
- X
- 예
- 아직
- 당신
- 너의
- 당신 자신
- 제퍼 넷