openfire xmppserver에서 관리 콘솔 인증 우회
중요한 보안 문제는 Ignite Realtime 커뮤니티에서 생성된 XMPP 프로토콜을 기반으로 하는 크로스 플랫폼 실시간 공동 작업 서버인 Openfire의 다양한 버전에 영향을 미칩니다.
웹 기반 애플리케이션인 Openfire의 관리 콘솔(Admin Console)이 설정 환경을 통한 경로 탐색 공격에 취약한 것으로 밝혀졌습니다. 이를 통해 인증되지 않은 사용자는 이미 구성된 Openfire 환경에서 인증되지 않은 Openfire 설정 환경을 사용하여 관리자용으로 예약된 Openfire 관리 콘솔의 제한된 페이지에 액세스할 수 있었습니다.
이러한 종류의 공격으로부터 보호하기 위해 경로 탐색 보호 기능이 이미 마련되어 있었지만 당시 사용 중이던 내장 웹 서버에서 지원하지 않았던 UTF-16 문자에 대한 특정 비표준 URL 인코딩을 방어하지 못했습니다.
내장 웹 서버의 이후 업그레이드에는 UTF-16 문자의 비표준 URL 인코딩에 대한 지원이 포함되었습니다. Openfire에 있는 경로 탐색 보호는 이 새로운 인코딩에 대한 보호를 포함하도록 업데이트되지 않았습니다.
Openfire의 API는 웹 인증에서 특정 URL을 제외하는 메커니즘을 정의합니다(예: 로그인 페이지에 사용됨). 이 메커니즘을 사용하면 와일드카드를 사용하여 유연한 URL 패턴 일치를 허용할 수 있습니다.
와일드카드 패턴 일치와 경로 탐색 취약점의 조합으로 인해 악의적인 사용자가 관리 콘솔 페이지에 대한 인증 요구 사항을 우회할 수 있습니다.
이 취약점은 버전 3.10.0부터 2015년 4월 이후 출시된 모든 Openfire 버전에 영향을 미칩니다. 이 문제는 Openfire 릴리스 4.7.5 및 4.6.8에서 패치되었으며 아직 출시되지 않은 4.8 브랜치의 첫 번째 버전(버전 4.8.0으로 예상됨)에 추가 개선 사항이 포함될 예정입니다.
Openfire 인스턴스가 영향을 받는지 테스트하려면 다음 단계를 따르세요. 시크릿 모드로 브라우저를 열거나 Openfire 관리 콘솔에 인증된 세션이 없는지 확인하세요. 다음 URL을 엽니다(Openfire를 실행하는 서버의 호스트 이름으로 수정되었을 수 있음).
``http://localhost:9090/setup/setup-s/%u002e%u002e/%u002e%u002e/log.jsp```
Openfire 로그 파일의 일부가 표시되면 Openfire 인스턴스가 이 취약점의 영향을 받는 것입니다. Openfire의 다른 버전은 다른 레이아웃을 표시합니다. 최신 버전의 Openfire는 어두운 배경에 로그 파일을 표시할 것으로 예상되는 반면, 이전 버전은 대체로 흰색 페이지를 표시합니다. (로그 파일의 내용에 따라 이 페이지는 헤더를 제외하고 비어 있을 수 있습니다!)
로그인 페이지로 리디렉션되는 경우 인스턴스는 영향을 받지 않을 가능성이 높습니다.
이 문제는 Openfire 릴리스 4.7.5 및 4.6.8에서 패치되었으며, 아직 출시되지 않은 4.8 브랜치의 첫 번째 버전(버전 4.8.0으로 예상됨)에 추가 개선 사항이 포함될 예정입니다.
adminConsole.access.allow-wildcards-in-excludes)이 도입되었습니다.새로운 구성 속성이 특정 Openfire 플러그인의 기능을 방해할 수 있다는 점에 유의하세요. 이는 현재 버전의 REST API 플러그인처럼 Openfire 관리 콘솔을 제공하는 내장 웹 서버에 (웹) 엔드포인트를 바인딩하는 플러그인의 경우 특히 그렇습니다. 이러한 플러그인이 계속 작동하거나 연결 가능하도록 하려면 'adminConsole.access.allow-wildcards-in-excludes' 속성을 'true'로 전환하고 내장된 웹 서버를 루프백 네트워크 인터페이스에만 바인딩하지 않도록 해야 할 수도 있습니다.
서버가 다음 플러그인의 이전 버전을 사용하는 경우 해당 플러그인을 업그레이드하세요.
해당 릴리스에 Openfire 업그레이드를 사용할 수 없거나 신속하게 조치를 취할 수 없는 경우 다음 단계 중 하나를 수행하여 Openfire 환경에 대한 위험을 완화할 수 있습니다.
주의: Openfire 플러그인을 통해 아래 나열된 일부 완화 효과가 줄어들 수 있으며 다른 완화는 플러그인 기능에 영향을 미칠 수 있습니다. 모니터링 서비스 플러그인, REST API 플러그인, 사용자 서비스 플러그인 및/또는 무작위 아바타 플러그인을 사용할 때는 특별한 주의가 필요합니다.
네트워크 보안 조치(네트워크 ACL 및/또는 방화벽, VPN)를 사용하여 커뮤니티에서 신뢰할 수 있는 구성원만 Openfire Admin Console에 액세스할 수 있도록 하십시오. 일반적으로 Openfire 관리 콘솔을 일반 인터넷에 노출하지 마십시오.
예:
docker run ... -p 5222:5222 -p 9090:9090 -p 9091:9091 openfire 대신 docker run ... -p 5222:5222 -p 127.0.0.1:9090:9090 -p를 사용하여 관리 콘솔에 대한 원격 액세스를 방지합니다. 127.0.0.1:9091:9091 사격잠재적인 공격 경로를 차단하기 위해 Openfire의 런타임 구성 파일을 수정할 수 있습니다.
Openfire의 설치 디렉토리에서 plugins/admin/webapp/WEB-INF/web.xml 파일을 찾으세요. 이 파일의 백업을 만든 후 원본 파일을 편집하세요.
이 파일의 내용은 XML입니다. <filter-name>AuthCheck</filter-name> 하위 요소가 포함된 <filter> 요소를 찾습니다. Openfire 버전에 따라 다음과 유사하게 보입니다.
``xml <필터> AuthCheck org.jivesoftware.admin.AuthCheckFilter <초기화 매개변수> 제외 <매개변수 값> login.jsp,index.jsp?logout=true,setup/index.jsp,setup/setup-*,.gif,.png,error-serverdown.jsp,loginToken.jsp </param-값>
`param-value` 요소 내부의 값은 쉼표로 구분된 값 목록입니다. 이 목록에서 '*'(별표) 문자를 모두 제거하세요.
파일을 저장하고 Openfire를 다시 시작하여 변경 사항을 적용합니다.
이 런타임 구성 변경 사항이 시간이 지나도 지속된다는 보장은 없습니다. 수정 사항이 있는지 모니터링하십시오. 가능한 한 빨리 Openfire의 안전한 버전으로 업그레이드하는 것이 좋습니다.
이 변경의 부작용은 Openfire 웹 기반 설정 마법사가 제대로 작동하지 않는다는 것입니다(변경 사항을 되돌리면 기능이 복원될 수 있음). 이 마법사는 일반적으로 Openfire를 처음 설치할 때만 사용됩니다.
#### 관리 콘솔을 루프백 인터페이스에 바인딩
Openfire 관리 콘솔은 웹 기반 애플리케이션입니다. 기본적으로 해당 웹 서버(Openfire에 내장되어 있음)는 실행 중인 호스트의 모든 네트워크 인터페이스에 바인딩됩니다.
특정 네트워크 인터페이스에 바인딩되도록 관리 콘솔을 구성할 수 있습니다. 이렇게 하면 다른 네트워크 인터페이스를 통해 액세스할 수 없습니다. 로컬 루프백 인터페이스에 바인딩하도록 관리 콘솔을 구성하면 서버 자체의 사용자만 액세스할 수 있습니다. 이렇게 하면 공격 경로가 줄어듭니다.
여러 Openfire 플러그인은 관리 콘솔 웹 서버를 통해 기능의 일부 또는 전부를 노출합니다. 예를 들어 REST API 플러그인은 이 웹 서버를 통해 엔드포인트를 제공합니다. 이 기능의 가용성은 웹서버를 특정 네트워크 인터페이스에 바인딩함으로써 영향을 받습니다.
Openfire 관리 콘솔의 웹서버를 특정 네트워크 인터페이스에 바인딩하려면 'openfire.xml' 구성 파일을 사용할 수 있습니다.
Openfire의 설치 디렉토리에서 'conf/openfire.xml' 파일을 찾으세요. 이 파일의 백업을 만든 후 원본 파일을 편집하세요.
이 파일의 내용은 XML입니다. 루트 `<jive>` 요소의 직접 하위 요소인 `<adminConsole>` 요소를 찾습니다. `<adminConsole>`의 하위 요소로 `<interface>`라는 새 요소를 추가합니다. `<인터페이스>` 요소의 값은 루프백 인터페이스의 이름 또는 인터페이스 주소여야 합니다. 값을 `127.0.0.1`로 설정하면 테스트된 모든 환경에서 작동합니다(대부분의 Linux 시스템에서 `lo`와 같은 값을 사용하거나 macOS에서 `lo0`과 같은 값을 사용하면 동일한 효과가 나타납니다).
`openfire.xml` 파일의 결과 조각은 다음과 유사합니다.
``xml
<?xml version="1.0" 인코딩="UTF-8"?>
<자이브>
<관리 콘솔>
<인터페이스>127.0.0.1</인터페이스>
<port>9090</port>
<securePort>9091</securePort>
</admin콘솔>
...
파일을 저장하고 Openfire를 다시 시작하여 변경 사항을 적용합니다.
Ignite Realtime 커뮤니티는 AuthFilterSanitizer 플러그인이라는 새로운 플러그인을 제공했습니다. 플러그인은 Openfire 관리 콘솔에서 설치하거나 IgniteRealtime.org 커뮤니티 웹사이트의 플러그인 아카이브 페이지에서 다운로드할 수 있습니다.
이 플러그인은 남용되기 쉬운 Openfire 인증 필터 항목을 주기적으로 제거하여 잠재적인 공격 경로를 차단합니다.
이 플러그인은 플러그인에서 제공할 수 있는 인증 필터의 남용이 허용되는 항목에 따라 달라지는 기능을 방해할 수 있습니다.
이 문제는 원래 Siebene@이 보고했으며 문제를 책임감 있고 자세하게 공개한 데 대해 감사드립니다!
Surevine Ltd.에서 제공하는 리소스에 감사드립니다. 이는 이 권고에 나열된 문제를 해결하는 데 중요한 역할을 했습니다.
필수 조치
Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 86.00 |
| 악용 신호(KEV 등재) | ×1.50 |
| VPI | 100.00 |
VPI 공식 vpi-v1 기준