ClickCease 취약점: 취약점: 그 이면에 숨겨진 버그 4부

콘텐츠 표

인기 뉴스레터 구독하기

4,500명 이상의 Linux 및 오픈소스 전문가와 함께하세요!

한 달에 두 번. 스팸이 없습니다.

취약점 뒤에 숨겨진 버그 4부

조아오 코레이아

2023년 4월 21일 - 기술 에반젤리스트

5부로 구성된 시리즈 중 4부에서는 정기적으로 보고되는 많은 익스플로잇을 설명하는 코드 버그를 살펴봅니다. 이번 시리즈에서는 Mitre CWE 상위 25개 목록에서 10위부터 6위까지의 항목을 살펴볼 것입니다. 이 부분에서 눈에 띄는 항목은 매우 흔하게 발생하는 '무료 이후 사용'입니다.

여기에서 찾을 수 있습니다. 1부는 여기에서, 파트 2는 여기에서파트 3은 여기에서.

바로 시작하겠습니다.

 

10. 위험한 유형의 파일 무제한 업로드

 

무제한 파일 업로드는 애플리케이션에서 사용자가 적절한 유효성 검사 없이 파일을 업로드할 수 있도록 허용하여 위험한 콘텐츠나 유형의 파일을 업로드할 수 있을 때 발생합니다. 공격자는 이 취약점을 악용하여 악성 코드를 실행하거나 애플리케이션 또는 서버 내의 다른 보안 취약점을 악용할 수 있습니다.

 

# Example of unrestricted file upload in Python

@app.route('/upload', methods=['POST'])

def upload_file():

    file = request.files['file']

    file.save(os.path.join('uploads', file.filename))

    return 'File uploaded successfully'

 

무제한 파일 업로드를 방지하려면 개발자는 강력한 파일 유효성 검사 메커니즘을 구현하고, 파일 유형을 알려진 허용 목록으로 제한하고, 서버 측 검사를 수행하여 안전한 파일만 허용되도록 해야 합니다.

 

9. 사이트 간 요청 위조(CSRF)

 

크로스 사이트 요청 위조(CSRF)는 사용자를 속여 현재 인증된 웹 애플리케이션에서 원치 않는 작업을 실행하도록 유도하는 공격의 한 유형입니다. 이는 악성 웹사이트, 이메일 또는 프로그램이 사용자의 브라우저로 하여금 사용자 모르게 또는 동의 없이 다른 사이트에서 작업을 수행하도록 할 때 발생합니다.

 

<!-- Example of CSRF attack in an HTML form -->

<form action="http://example.com/transfer_funds" method="POST">

  <input type="hidden" name="amount" value="1000" />

  <input type="hidden" name="destination_account" value="attackers_account" />

  <input type="submit" value="Click here for a free gift!" />

</form>

 

개발자는 CSRF 공격을 완화하기 위해 안티 CSRF 토큰을 구현하고, 쿠키에서 SameSite 속성을 따르는 등 안전한 코딩 관행을 사용하며, 민감한 작업에 대해 적절한 인증 및 권한 확인을 수행해야 합니다.

 

8. 제한된 디렉토리에 대한 경로 이름의 부적절한 제한(일명 "경로 트래버스") 8.

 

경로 탐색은 애플리케이션이 특수 요소를 적절히 무력화하지 않고 외부 입력을 사용하여 파일 또는 디렉터리 경로를 구성할 때 발생하는 취약점입니다. 이로 인해 공격자는 의도된 제한된 위치 외부의 파일 또는 디렉터리에 액세스할 수 있으며, 잠재적으로 민감한 정보에 대한 무단 액세스, 수정 또는 공개로 이어질 수 있습니다.

 

// Example of a path traversal vulnerability in PHP

$filename = $_GET['file'];

$content = file_get_contents("/restricted_directory/$filename");

echo $content;

 

경로 통과 공격을 방지하려면 개발자는 사용자 입력의 유효성을 검사하고, 경로 조작에 보안 함수 또는 라이브러리를 사용하며, 서버 측에 적절한 액세스 제어를 적용하여 민감한 파일 및 디렉토리에 대한 액세스를 제한해야 합니다.

 

7. 무료 후 사용

 

'해제 후 사용'은 포인터가 해제된 후에도 프로그램이 포인터를 계속 사용할 때 발생하는 메모리 손상 문제입니다. 이는 결함의 발생 시기와 인스턴스화에 따라 데이터 손상, 충돌 또는 임의 코드 실행으로 이어질 수 있습니다.


// Example of a use after free error in C

char *ptr = (char *)malloc(SIZE);

if (err) {

    abrt = 1;

    free(ptr);

}

...

if (abrt) {

    logError("operation aborted before commit", ptr);

}



무료 이슈가 발생한 후 사용하지 않으려면 개발자는 적절한 메모리 관리, C++와 같은 언어에서 스마트 포인터 사용, 포인터가 매달리지 않도록 적절한 오류 처리 등 안전한 코딩 관행을 따라야 합니다.

 

6. OS 명령에 사용되는 특수 요소의 부적절한 무력화("OS 명령 인젝션") 6.

 

OS 명령 인젝션은 애플리케이션이 특수 요소를 적절히 무력화하지 않고 외부의 영향을 받은 입력을 사용하여 운영 체제 명령을 구성할 때 발생합니다. 이를 통해 공격자는 표적 시스템에서 임의의 명령이나 코드를 실행할 수 있으며, 잠재적으로 시스템에 대한 무단 액세스 또는 제어로 이어질 수 있습니다.

 

import os

user_input = input("Enter the name of the file to search: ")

command = f"find / -name {user_input}"

os.system(command)

 

OS 명령 인젝션을 방지하기 위해 개발자는 사용자 입력의 유효성을 검사 및 살균하고, 명령 구분 기호를 허용하지 않는 매개변수화된 API 또는 함수를 사용하며, 최소 권한 원칙을 적용하여 공격 성공 시 발생할 수 있는 잠재적 영향을 최소화해야 합니다.

 

결론적으로, 개발자와 시스템 관리자 모두 이러한 일반적인 취약점을 인식하고 이를 완화하는 방법을 이해하는 것이 중요합니다. 보안 코딩 관행을 따르고 적절한 보호 장치를 구현하면 익스플로잇 위험을 크게 줄이고 잠재적인 위협으로부터 애플리케이션과 시스템을 보호할 수 있습니다.

요약
취약점 뒤에 숨겨진 버그 4부
기사 이름
취약점 뒤에 숨겨진 버그 4부
설명
5부로 구성된 시리즈 중 4부에서는 정기적으로 보고되는 많은 취약점을 설명하는 코드 버그에 대해 살펴봅니다.
작성자
게시자 이름
TuxCare
게시자 로고

Kernel 재부팅, 시스템 다운타임 또는 예정된 유지 보수 기간 없이 취약성 패치를 자동화하고 싶으신가요?

TuxCare로 라이브 패치에 대해 알아보기

TuxCare 게스트 작가 되기

시작하기

메일

가입

4,500

Linux & 오픈 소스
전문가!


뉴스레터 구독하기