카테고리 없음

비박스(bWAPP) A4 Insecure Direct Object References - IDOR (안전하지 않은 직접 객체 참조)

태군 코드 2022. 8. 29. 15:38
반응형

이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.

 

A4 - Insecure Direct Object References

 

Insecure Direct Object References

Insecure Direct Object References (IDOR)

안전하지 않은 직접 개체 참조(IDOR)는 응용 프로그램이 사용자 제공 입력을 기반으로 개체에 대한 직접 액세스를 제공할 때 발생합니다. 이 취약점으로 인해 공격자는 권한 부여를 우회하고 시스템의 리소스(예: 데이터베이스 레코드 또는 파일)에 직접 액세스 할 수 있습니다. 안전하지 않은 직접 개체 참조를 사용하면 공격자가 개체를 직접 가리키는 데 사용되는 매개 변수 값을 수정하여 권한 부여를 우회하고 리소스에 직접 액세스 할 수 있습니다. 이러한 리소스는 다른 사용자, 시스템의 파일 등에 속한 데이터베이스 항목일 수 있습니다. 이는 응용 프로그램이 사용자가 제공한 입력을 받아 충분한 권한 부여 검사를 수행하지 않고 개체를 검색하는 데 사용하기 때문에 발생합니다.

 

테스트 방법
이 취약점을 테스트하려면 테스터는 먼저 사용자 입력이 개체를 직접 참조하는 데 사용되는 응용 프로그램의 모든 위치를 매핑해야 합니다. 예를 들어, 사용자 입력이 데이터베이스 행, 파일, 애플리케이션 페이지 등에 액세스하는 데 사용되는 위치입니다. 다음으로 테스터는 개체를 참조하는 데 사용되는 매개변수의 값을 수정하고 다른 사용자에게 속한 개체를 검색하거나 승인을 우회하는 것이 가능한지 여부를 평가해야 합니다.

직접 개체 참조를 테스트하는 가장 좋은 방법은 서로 다른 소유 개체 및 기능을 다루기 위해 최소한 두 명의(종종 더 많은) 사용자를 갖는 것입니다. 예를 들어 각각 다른 개체(예: 구매 정보, 개인 메시지 등)에 액세스할 수 있는 두 명의 사용자와 애플리케이션 기능에 대한 직접 참조가 있는지 여부를 확인하기 위해 다른 권한을 가진 사용자(예: 관리자 사용자)가 있습니다. 여러 사용자를 사용함으로써 테스터는 다른 사용자에게 속한 개체에 액세스 하려고 시도할 수 있으므로 다른 개체 이름을 추측하는 데 귀중한 테스트 시간을 절약할 수 있습니다.

 

취약점에 대한 시나리오와 각각을 테스트하는 방법입니다.

 

1. http://foo.bar/somepage?invoice=12345 

이 경우 송장 매개변수의 값은 데이터베이스의 송장 테이블에서 인덱스로 사용됩니다. 애플리케이션은 이 매개변수의 값을 가져와 데이터베이스에 대한 쿼리에서 사용합니다. 그런 다음 애플리케이션은 사용자에게 송장 정보를 반환합니다.

인보이스 값이 쿼리에 직접 들어가기 때문에 매개변수 값을 수정하면 인보이스가 속한 사용자에 관계없이 모든 인보이스 개체를 검색할 수 있습니다. 이 경우를 테스트하기 위해 테스터는 다른 테스트 사용자에 속한 송장의 식별자를 얻은 다음 승인 없이 객체에 액세스 할 수 있는지 확인해야 합니다.

 

2. http://foo.bar/changepassword?user=someuser 

이 경우 user매개변수 값은 암호를 변경해야 하는 사용자를 애플리케이션에 알리는 데 사용됩니다. 첫 번째 단계에서 애플리케이션은 어떤 사용자의 비밀번호를 변경할 것인지에 대한 요청을 받고 다음 단계에서 사용자는 현재 비밀번호를 묻지 않고 새 비밀번호를 제공합니다.

user매개변수는 암호 변경 작업을 수행할 사용자의 개체를 직접 참조하는 데 사용됩니다. 이 경우를 테스트하기 위해 테스터는 현재 로그인한 것과 다른 테스트 사용자 이름을 제공하고 다른 사용자의 비밀번호를 수정할 수 있는지 확인해야 합니다.

 

3. http://foo.bar/showImage?img=img00011 

이 경우 file매개변수의 값은 사용자가 검색하려는 파일을 애플리케이션에 알리는 데 사용됩니다. 다른 파일의 이름이나 식별자(예: file=image00012.jpg)를 제공함으로써 공격자는 다른 사용자에게 속한 개체를 검색할 수 있습니다.

이 경우를 테스트하기 위해 테스터는 사용자가 접근할 수 없다고 가정된 참조를 획득하고 이를 매개변수 값으로 사용하여 접근을 시도해야 한다 file. 참고: 이 취약점은 디렉토리/경로 순회 취약점과 함께 종종 악용됩니다(경로 순회 테스트 참조 )

 

4. http://foo.bar/accessPage?menuitem=12 

이 경우 menuitem매개변수의 값은 사용자가 액세스를 시도하는 메뉴 항목(따라서 어떤 응용 프로그램 기능)을 응용 프로그램에 알리는 데 사용됩니다. 사용자가 제한되어 있으므로 메뉴 항목 1, 2 및 3에만 액세스 할 수 있는 링크가 있다고 가정합니다. menuitem매개변수 값을 수정하면 승인을 우회하고 추가 애플리케이션 기능에 액세스할 수 있습니다. 이 경우를 테스트하기 위해 테스터는 메뉴 항목을 참조하여 애플리케이션 기능이 결정되는 위치를 식별하고 지정된 테스트 사용자가 액세스할 수 있는 메뉴 항목의 값을 매핑한 다음 다른 메뉴 항목을 시도합니다.

위의 예에서 단일 매개변수의 수정으로 충분합니다. 그러나 때로는 객체 참조가 둘 이상의 매개변수로 분할될 수 있으며 그에 따라 테스트를 조정해야 합니다.

 

[참고 사이트]

1. https://www.acunetix.com/blog/web-security-zone/what-are-insecure-direct-object-references/

2. https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/05-Authorization_Testing/04-Testing_for_Insecure_Direct_Object_References

3. https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/05-Authorization_Testing/01-Testing_Directory_Traversal_File_Include
4. https://cheatsheetseries.owasp.org/cheatsheets/Insecure_Direct_Object_Reference_Prevention_Cheat_Sheet.html

5. https://owasp.org/www-project-web-security-testing-guide/assets/archive/OWASP_Testing_Guide_v4.pdf

반응형