
Apache OpenMeetings 9.1.0 - 높음 - 원격 - 권한 잔여 - 오래된 /install 마법사가 두 번째 ADMIN을 삽입함
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · openmeetings-stale-install-admin
분류: 권한 잔여 도달 범위: 원격
Apache OpenMeetings 9.1.0 (9773c59e) - Apache Software Foundation
InstallWizardPage는 isInstalled() 이후의 새 요청을 리다이렉트합니다. 첫 설치 전에 열린 Wicket 페이지는 계속 살아 있습니다. 그 오래된 세션에서 Finish를 실행하면 loadAll(cfg, true)가 실행됩니다. ImportInitvalues.checkInstalled는 "no need to install"을 로그로 남기고 반환하지 않습니다. 두 번째 finish는 또 다른 ADMIN+SOAP 사용자를 삽입합니다.
| ID | 아직 CVE 없음 |
| 분류 | 권한 잔여 |
| 도달 범위 | 원격 (첫 설정 중 인증 없는 /install) |
| CWE | CWE-367, CWE-269 |
| CVSS | 높음: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 제품 | Apache OpenMeetings |
| 영향 받음 | 9.1.0 (9773c59e1af327bf988018e661f456ae9997c29f) 첫 설치 기간 |
| 인증 | 오래된 마법사 세션에서는 없음 |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1:18159 전용. 공식 9.1.0 tarball, 미설치 상태, HTTP 5080. |
저는 태그 9.1.0을 고정했고, peel은 9773c59e1af327bf988018e661f456ae9997c29f입니다. 이 잔여 권한은 첫 설치가 완료되기 전에 열린 마법사 페이지를 필요로 합니다.
인스턴스가 아직 설치되지 않은 동안 /openmeetings/install에 도달합니다. 해당 JSESSIONID를 유지합니다. 운영자가 첫 설치를 완료할 때까지 기다립니다. 오래된 페이지에서 Finish를 POST합니다.
| 메서드 | 싱크 | 권한 |
|---|---|---|
오래된 POST 마법사 Finish (wizard-form-buttons-finish) | ImportInitvalues.checkInstalled가 로그만 남기고 계속 진행 (ImportInitvalues.java:607-612); loadInitUserAndGroup | 무결성 (랩에서 입증): 두 번째 사용자 staleadm이 ADMIN, SOAP, LOGIN, DASHBOARD, ROOM 권한을 가짐. SOAP 로그인 성공. 사용자 목록 count=2. |
동일한 loadAll(cfg, true) | 오래된 폼에서의 persistence / SMTP / 경로 | 무결성 (추론): 공격자가 제어하는 마법사 필드로 persistence.xml 및 메일 설정을 재작성. SUCCESS에는 필요하지 않음. |
랩에서 입증 vs 추론: 두 번째 ADMIN+SOAP 로그인은 랩에서 입증됨. persistence.xml 재작성은 loadAll에서 추론됨.
요구 사항: 공격자가 isInstalled() 이전에 /install을 가져와야 함. 그런 다음 운영자가 설치를 완료함. 동일한 Wicket 페이지 id가 여전히 POST됨. 공식 docker 이미지는 이미 설치되어 있으므로, 이는 tarball 첫 부팅 기간(및 모든 재설치)에 해당함.
| 표면 | 이유 |
|---|---|
설치 후 새로운 GET /install | 생성자가 /signin으로 리다이렉트 (InstallWizardPage.java:31-34). 랩: 새 세션은 signin에 도달함. |
| 설치 전 인증 없는 SOAP 로그인 | health installed=false; 마법사 finish 전까지 로그인 실패. |
| Tomcat manager / H2 console | manager 제외됨, 이 핀에서는 H2 console 꺼짐. |
생성자 잠금은 "설치 후 설치"에 대한 완전한 수정처럼 보입니다. checkInstalled는 여전히 로그만 남깁니다. Wicket은 페이지를 세션에 저장합니다. isInstalled()를 넘어선 세션은 여전히 loadAll을 호출하는 Finish 버튼을 유지합니다.
admin.sh -i는 두 번째 JVM이며 Tomcat CryptProvider를 로드하지 않으므로, 이 랩은 두 번째 웹 마법사를 첫 설치자로, 오래된 페이지를 공격자로 사용합니다.
cd lab
./run.sh
루프백 http://127.0.0.1:18159/openmeetings. 마지막 줄 확인:
SUCCESS OPENMEETINGS-STALE-INSTALL-WITNESS
checkInstalled는 이미 설치된 경우 반환(또는 예외 발생)해야 합니다. Finish를 일회성 설치 토큰에 바인딩하세요. isInstalled()가 뒤집히면 세션에서 Wicket 페이지를 제거하세요. 관리자가 이미 존재하는 경우 loadInitUserAndGroup에서 두 번째 ADMIN을 삽입하지 마세요.
Abraxas Labs - https://abraxaslabs.tech - https://github.com/abraxas - https://x.com/abraxas_null - [email protected]
공급업체: [email protected]