메인 콘텐츠로 건너뛰기
블로그보안리노드 보안 다이제스트, 2023년 3월 13일~19일

리노드 보안 다이제스트, 2023년 3월 13~19일

리노드 시큐리티 다이제스트

이번 주 다이제스트에서는 이에 대해 논의해 보겠습니다:

  • OAuth 인증에 대한 적절한 상태, 논스 및 PKCE 확인이 누락되었습니다;
  • Apache HTTP 서버: mod_proxy_uwsgi HTTP 응답 분할; 
  • 코드 서명_인젝트_기본_자격으로 인해 ShadowsocksX-NG는 com.apple.security.get-task-allow 자격으로 서명합니다.
  • 공격자가 컨테이너 내에서 권한을 에스컬레이션할 수 있도록 허용하는 runc의 액세스 제어 문제를 발견했습니다.
CVE-2023-27490: OAuth 인증에 대한 적절한 상태, 논스 및 PKCE 검사 누락

배경

OAuth (개방형 인증)은 타사 애플리케이션이 사용자 이름 및 비밀번호와 같은 사용자의 자격 증명을 알 필요 없이 사용자를 대신하여 리소스에 액세스할 수 있도록 하는 개방형 표준 프로토콜입니다. OAuth 사용자가 리소스 소유자(예: 소셜 미디어 플랫폼)에게 자신을 인증하고 액세스 토큰을 획득하여 리소스에 대한 액세스 권한을 부여한 다음 사용자를 대신하여 리소스에 액세스하는 데 사용할 수 있도록 하는 방식으로 작동합니다. 이 액세스 토큰은 리소스 소유자가 발급하며 타사 애플리케이션에서 사용자의 로그인 자격 증명을 몰라도 사용자의 리소스에 액세스하는 데 사용할 수 있습니다.

취약성

취약점 CVE-2023-27490은 OAuth 인증 흐름과 관련된 Next-auth 패키지에 존재합니다. 특히, 공격자가 인증 URL을 가로채서 조작할 때 OAuth 세션 중에 발생합니다. 이 취약점을 통해 공격자는 피해자로 로그인하여 정상적으로 적용되어 있는 CSRF 보호를 우회할 수 있습니다. OAuth 플로우에서 인증 URL은 인증 프로세스를 시작하고 사용자 리소스에 대한 액세스를 요청하는 데 사용됩니다. 이 URL에는 CSRF, 리플레이 공격, 토큰 도용과 같은 공격을 방지하는 데 사용되는 상태, pkce, 논스와 같은 중요한 매개변수가 포함되어 있습니다. 그러나 공격자가 인증 URL을 가로채서 조작하면 이러한 보호 기능을 우회할 수 있으며, 이로 인해 Next-auth 패키지에 설명된 취약점이 발생할 수 있습니다.

이 취약점의 근본 원인은 손상된 OAuth 세션 중에 발생하는 부분적인 장애입니다. 구체적으로 세션 코드가 잘못 생성되어 공격자가 CSRF 보호를 우회하고 피해자로 로그인할 수 있습니다.

완화

  • 이 취약점은 다음 인증 버전인 v4.20.1에서 해결되었으며, 이 문제를 해결하려면 최신 버전으로 업그레이드하는 것이 좋습니다.
  • 그러나 고급 초기화를 사용하면 개발자가 공급자 구성과 비교하여 상태, pkce 및 논스에 대한 콜백 요청을 수동으로 확인하고 불일치하는 경우 로그인 프로세스를 중단할 수 있습니다.
CVE-2023-27522: Apache HTTP 서버: mod_proxy_uwsgi HTTP 응답 분할

배경

HTTP 요청 스머핑은 공격자가 애플리케이션 또는 웹 서버가 클라이언트가 보낸 HTTP 요청을 처리하는 방식을 조작할 수 있을 때 발생하는 웹 애플리케이션 취약점입니다. 이 취약점을 통해 공격자는 보안 제어를 우회하거나 권한이 없는 작업을 수행하거나 민감한 데이터를 탈취할 수 있습니다.

이 공격은 일반적으로 콘텐츠 길이 헤더 해석 또는 청크 인코딩 처리와 같이 프론트엔드 웹 서버와 백엔드 서버 또는 애플리케이션이 HTTP 요청을 처리하는 방식에서 불일치를 악용하는 방식으로 이루어집니다. 공격자는 이러한 불일치를 조작하여 두 서버에서 다르게 해석되는 요청을 만들어 요청이 부적절하게 처리되거나 프런트엔드 서버가 공격자를 대신하여 악의적인 요청을 실행하는 프록시 역할을 하게 할 수 있습니다.

취약성

취약점 CVE-2023-27522는 Apache HTTP 서버 버전 2.4.30부터 2.4.55까지, 특히 mod_proxy_uwsgi 모듈을 통해 영향을 받습니다. 이 취약점은 원본 서버가 공백이나 탭과 같은 특정 특수 문자가 포함된 특수하게 조작된 HTTP 응답 헤더와 그 뒤에 오는 "Content-Length" 헤더를 전송할 때 발생합니다.

Apache HTTP 서버의 mod_proxy_uwsgi 모듈은 이 헤더를 잘못 해석하여 잘리거나 분할된 "Content-Length" 헤더를 사용하여 클라이언트에 응답을 전달할 수 있습니다. 이로 인해 클라이언트가 불완전하거나 잘못된 응답을 수신하여 공격자가 데이터 유출, 서버 측 요청 위조(SSRF), 크로스 사이트 스크립팅(XSS), 원격 코드 실행(RCE) 등 다양한 유형의 공격을 수행할 수 있게 됩니다.

완화

  • 최신 버전의 Apache HTTP 서버로 업그레이드하거나 사용 가능한 패치를 적용하는 것이 좋습니다. 
  • 또한 웹 애플리케이션 방화벽과 침입 탐지 시스템을 사용하여 HTTP 응답 스무딩 공격을 탐지하고 방지할 수 있습니다. 
  • 또한 HTTP 응답에 특수 문자가 삽입되는 것을 방지하기 위해 적절한 입력 유효성 검사 및 출력 인코딩 기술을 사용하는지 확인하는 것도 중요합니다.
CVE-2023-27574: com.apple.security.get-task-allow로 서명하는 ShadowsocksX-NG 

배경

ShadowsocksX-NG는 사용자가 인터넷에 액세스할 수 있는 안전한 socks5 프록시를 생성하여 인터넷 검열을 우회할 수 있도록 도와주는 무료 오픈 소스 애플리케이션입니다.

애플리케이션을 개발하여 배포할 준비가 되면 유효한 인증서로 서명하여 애플리케이션이 합법적이고 변조되지 않았는지 확인해야 합니다. 이 프로세스를 코드 서명이라고 합니다.

코드 서명의 요구 사항 중 하나는 애플리케이션이 올바르게 작동하는 데 필요한 권한인 자격을 포함해야 한다는 것입니다. 권한은 네트워크, 파일 시스템 또는 하드웨어와 같이 애플리케이션이 액세스할 수 있는 리소스 및 작업을 지정합니다.

취약성

취약점 CVE-2023-27574는 com.apple.security.get-task-allow라는 권한으로 서명된 ShadowsocksX-NG 버전 1.10.0 애플리케이션에 존재합니다. 이 권한은 애플리케이션이 사용자 기기에서 실행 중일 때에도 Xcode와 같은 개발 도구에서 디버깅 및 검사할 수 있도록 합니다.

이 자격을 포함하는 이유는 CODE_SIGNING_INJECT_BASE_ENTITLEMENTS라는 기능 때문입니다. 이 기능은 코드 서명 프로세스의 일부이며 개발자가 애플리케이션의 권한 파일에 명시적으로 지정된 권한 외에 추가 권한을 포함할 수 있습니다. 즉, CODE_SIGNING_INJECT_BASE_ENTITLEMENTS 기능이 활성화되면 Xcode는 애플리케이션의 서명에 기본 권한 집합을 자동으로 주입합니다. 이러한 권한은 개발자의 계정과 프로젝트 설정을 기반으로 합니다. 여기에는 기본적으로 com.apple.security.get-task-allow 권한이 포함됩니다.

이 접근 방식의 문제점은 공격자가 com.apple.security.get-task-allow 권한을 악용하여 애플리케이션의 메모리에서 암호화 키 또는 기타 민감한 데이터와 같은 민감한 정보를 얻을 수 있다는 것입니다. 이는 애플리케이션의 취약점을 악용하거나 타사 도구를 사용하여 애플리케이션의 메모리를 읽는 방식으로 이루어질 수 있습니다.

완화

  • ShadowsocksX-NG 버전 1.10.0 사용자는 com.apple.security.get-task-allow 권한이 포함되지 않은 최신 버전으로 업그레이드하거나 애플리케이션의 코드 서명 서명에서 수동으로 해당 권한을 제거하는 것이 좋습니다.
  • 또한 사용자는 VPN/프록시 소프트웨어를 사용할 때 주의해야 하며 신뢰할 수 있고 안전한 버전의 소프트웨어를 사용하고 있는지 확인해야 합니다.
CVE-2019-5736: 런크의 액세스 제어 문제

배경

runc 는 오픈 컨테이너 이니셔티브(OCI) 사양에 따라 컨테이너를 생성하고 실행하기 위한 명령줄 유틸리티입니다. 일반적으로 Docker, Kubernetes 등과 같은 컨테이너 런타임 환경에서 사용됩니다.

취약성

이 취약점 CVE-2019-5736은 공격자가 컨테이너 내에서 권한을 에스컬레이션할 수 있는 접근 제어 문제입니다. 특히, 이 문제는 1.1.4까지의 runc 버전이 컨테이너를 시작할 때 루트 파일 시스템(rootfs)을 처리하는 방식과 관련이 있습니다.

In libcontainer/rootfs_linux.go에서 runc는 컨테이너를 읽기 전용으로 마운트한 다음 그 위에 쓰기 가능한 레이어를 오버레이하여 컨테이너의 rootfs를 설정합니다. 이 프로세스는 컨테이너의 파일 시스템을 생성하고 호스트 시스템으로부터 격리하는 데 사용됩니다.

그러나 이 코드의 결함으로 인해 공격자가 호스트 시스템의 /proc/self/exe 파일을 덮어쓸 수 있습니다. 이 파일은 runc 바이너리 자체에 대한 심볼릭 링크입니다. 이렇게 하면 공격자는 상승된 권한으로 임의의 코드를 실행하여 컨테이너를 효과적으로 탈출하고 호스트 시스템을 제어할 수 있습니다.

완화

  • 패치된 버전으로 업그레이드하세요: 이 취약점에 대한 가장 효과적인 완화 방법은 패치된 버전의 runc로 업그레이드하는 것입니다. runc 버전 1.0.0-rc6 이상에는 이 취약점에 대한 수정 사항이 포함되어 있습니다.
  • 컨테이너 런타임을 업그레이드하세요: Docker 또는 Kubernetes와 같은 컨테이너 런타임 환경을 사용하는 경우, 패치된 runc 버전이 포함된 버전으로 업그레이드해야 합니다.
  • 접근 제어를 구현하세요: 이 취약점의 위험을 완화하려면 공격자가 사용자 지정 볼륨 마운트 구성으로 컨테이너를 생성하고 사용자 지정 이미지를 실행하는 기능을 제한하기 위해 액세스 제어를 구현해야 합니다. 
  • 컨테이너 권한을 최소화하세요: 컨테이너의 권한을 최소화하면 잠재적인 공격의 범위를 제한하는 데 도움이 될 수 있습니다. 이는 루트 사용자가 아닌 사용자로 컨테이너를 실행하고, 컨테이너 기능을 제한하고, 민감한 호스트 리소스에 대한 액세스를 제한함으로써 달성할 수 있습니다.

내용

댓글 남기기

이메일 주소는 게시되지 않습니다. 필수 필드가 표시됩니다 *