불충분한 권한 또는 권한의 부적절한 처리

Improper Handling of Insufficient Permissions or Privileges

설명

불충분한 권한 또는 권한의 부적절한 처리(Improper Handling of Insufficient Permissions or Privileges)는 애플리케이션이 사용자에게 부여된 권한을 제대로 검증하지 않거나 적절한 오류 메시지를 반환하지 않는 경우 발생하는 취약성입니다. 이는 비인가 사용자가 제한된 리소스나 기능에 접근할 수 있게 하여 보안 위험을 초래할 수 있습니다.

잠재적 영향

  • 권한 상승: 비인가 사용자가 관리자 권한을 획득하여 시스템을 조작할 수 있습니다.

  • 데이터 유출: 민감한 데이터가 비인가 사용자에게 노출될 수 있습니다.

  • 서비스 중단: 비인가 사용자가 시스템 리소스에 접근하여 서비스가 중단될 수 있습니다.

해결 방법

  • 권한 검증: 모든 중요한 기능과 리소스 접근에 대해 적절한 권한 검증을 수행합니다.

  • 오류 메시지 처리: 사용자에게 적절한 오류 메시지를 제공하여 권한 부족을 명확히 알립니다.

  • 보안 라이브러리 사용: Django, Flask, FastAPI 등과 같은 프레임워크에서 제공하는 인증 및 권한 부여 기능을 사용합니다.

취약한 코드 및 안전한 코드 예시

Unsafe Django code & Safe Django code

# Unsafe Django code
from django.http import HttpResponse

def view_sensitive_data(request):
    if request.user.username != 'admin':
        return HttpResponse("Not authorized")
    # 민감한 데이터 처리 로직
    return HttpResponse("Sensitive data")

설명:

  • 취약한 코드: 단순히 사용자 이름을 확인하여 권한을 검증하며, 비인가 사용자가 민감한 데이터에 접근할 수 있습니다.

  • 안전한 코드: Django의 login_requireduser_passes_test 데코레이터를 사용하여 적절한 권한을 가진 사용자만 민감한 데이터에 접근할 수 있도록 합니다.

Unsafe Flask code & Safe Flask code

설명:

  • 취약한 코드: URL 파라미터로 전달된 사용자 이름을 검증하여 권한을 확인하며, 비인가 사용자가 민감한 데이터에 접근할 수 있습니다.

  • 안전한 코드: Flask-Login의 login_required 데코레이터와 current_user 객체를 사용하여 적절한 권한을 가진 사용자만 민감한 데이터에 접근할 수 있도록 합니다.

Unsafe FastAPI code & Safe FastAPI code

설명:

  • 취약한 코드: URL 파라미터로 전달된 사용자 이름을 검증하여 권한을 확인하며, 비인가 사용자가 민감한 데이터에 접근할 수 있습니다.

  • 안전한 코드: FastAPI의 DependsOAuth2PasswordBearer를 사용하여 적절한 권한을 가진 사용자만 민감한 데이터에 접근할 수 있도록 합니다.

참조

Last updated