Insecure Direct Object References - 2, 3, 4, 5
[ 이론 ]
Direct Object References
Direct Object Reference는 응용프로그램이 데이터와 객체에 액세스하기 위해 클라이언트에서 제공한 입력을 사용함.
ex) https://some.company.tld/dor?id=12345 https://some.company.tld/images?img=12345 https://some.company.tld/dor/12345
GET method 사용
다른 method : POST, PUT, DELETE 또는 다른 방법들도 잠재적으로 취약하다.
Insecure Direct Object References
참조가 제대로 처리되지 않아 사용자가 액세스할 수 없는 데이터에 액세스하거나 작업을 수행하는데 개인 데이터를 공개하는 등 안전하지 않은 경우가 있을 수 있다. 사용자가 프로필을 볼때 URL의 이 다음과 같다고 가정
ex) https://some.company.tld/app/user/23398
여기서 프로필을 보고 있고 23399 사용자로 이동하면 다른 사람의 프로필을 볼수 있어 안전하지 않다. 데이터 확인을 위해 GET 메소드 이상으로 데이터를 확인하거나 확장할 수 있다.
More good reading
Before we go on to practice, here’s some good reading on Insecure Direct Object References:
- https://www.owasp.org/index.php/Testing_for_Insecure_Direct_Object_References_(OTG-AUTHZ-004)
- https://www.owasp.org/index.php/Top_10-2017_A5-Broken_Access_Control
- https://cheatsheetseries.owasp.org/cheatsheets/Insecure_Direct_Object_Reference_Prevention_Cheat_Sheet.html
- https://www.owasp.org/index.php/Top_10_2013-A4-Insecure_Direct_Object_References
- http://cwe.mitre.org/data/definitions/639.html
[ 문제 ]
2. Authenticate First, Abuse Authorization Later
인증 먼저, 그 다음에 승인 남용
많은 액세스 제어 문제는 인증되었지만 인증되지 않은 사용자의 공격을 받기 쉽다. 인증 먼저하고 허가를 우회하거나 남용하는 방법을 찾자. id : tom / pw : cat 포함하고 있다.
3. Observing Differences & Behaviors
차이 & 행동 관찰
AppSec의 공격적 측면의 일관된 원칙은 보이는 것에 대한 raw 응답에서 차이를 보이는 것이다. 다시말해 raw 응답에는 화면/페이지에 나타나지 않는 데이터가 있는 경우가 많다. 아래 프로필을 보고 차이점을 기록하라.
4. Guessing & Predicting Patterns
추측 및 패턴 예측
다른 방법으로 자신의 프로필 보기
우리가 작업 중인 앱은 프로필에 따라 RESTful 패턴을 따르는 것 같다. 많은 앱은 권한이 높은 사용자가 다른 사용자의 컨텐츠에 액세스할 수 있는 역할을 가지고 있다. 이 경우, 사용자 자시느이 세션/인증 데이터는 그들이 보기를 원하는 프로필을 우리에게 알려주지 않기 때문에 단시 /profile만 작동하지 않을 것이다. 그렇다면 직접 객체 참조를 사ㅛㅇ하여 자신의 프로필을 명시적으로 볼 수 이쓴ㄴ 패턴은 무엇 일까?
자신의 프로필을 보려면 URL의 대체 경로를 입력하라. 'WebGoat'로 시작
5. Playing with the Patterns
View Another Profile
자신의 프로필을 보는 데 이미 사용한 대체 경로를 사용하여 다른 사용자의 프로필을 확인하라. 'View Profile' 버튼을 사용해 요청을 가로채거나 수정하여 다른 프로필을 본 수 있다. 또는, 브라우저에서 수동 GET 요청을 사용할 수도 있다.
Edit Another Profile
이전 앱은 다른 패턴을 따를 수 있지만, RESTful 앱은 종종 다른 기능을 수행하기 위해 방법을 변경한다. 이 지식을 사용하여 동일한 기본 요청을 취하고 방법, 경로 및 페이로드를 변경하여 다른 사용자 프로필을 수정하라. 역할을 더 낮은 것으로 바꿔라. 또한, 사용자의 색상을 'red'로 바꿔라.
POST로 변경하고 데이터를 추가해서 전송했다.
PUT하고 GET 메소드만 좋아한다.
PUT으로 변경한다.
Media Type이 별로란다.
json으로 변경한다.
문법 오류다.
put 메소드의 body 형태를 봐야겠다.
성공