Critical security vulnerabilities
Kritieke beveiligingskwetsbaarheden
Vulnerabilidades de seguridad críticas
This post addresses CVE-2016-10033 and CVE-2016-10045 — critical remote code execution vulnerabilities in PHPMailer. If you're running PHPMailer < 5.2.20, upgrade immediately.
Deze post behandelt CVE-2016-10033 en CVE-2016-10045 — kritieke remote code execution kwetsbaarheden in PHPMailer. Als je PHPMailer < 5.2.20 draait, upgrade dan onmiddellijk.
Este artículo aborda CVE-2016-10033 y CVE-2016-10045 — vulnerabilidades críticas de ejecución remota de código en PHPMailer. Si estás ejecutando PHPMailer < 5.2.20, actualiza inmediatamente.
The vulnerabilities
Security researcher Dawid Golunski discovered two critical vulnerabilities in PHPMailer that allow remote code execution:
- CVE-2016-10033: PHPMailer < 5.2.18 Remote Code Execution
- CVE-2016-10045: PHPMailer < 5.2.20 Remote Code Execution (0day Patch Bypass)
The second vulnerability was a bypass of the initial patch, which is why you need version 5.2.20 or higher to be fully protected.
The problem: multiple installations
If you manage servers hosting multiple PHP applications, you likely have PHPMailer installed in dozens of different locations — each WordPress site, each Laravel project, each custom application. Manually upgrading each one is time-consuming and error-prone.
The solution: automated upgrade script
I created upgrade-phpmailer.sh, a shell script that automatically finds and upgrades all PHPMailer installations on your server. It downloads the latest secure version from GitHub and replaces the core files while creating backups.
Files updated
The script upgrades these three core PHPMailer components:
class.phpmailer.phpclass.pop3.phpclass.smtp.php
Basic usage
# Download the script
wget https://gist.githubusercontent.com/Magentron/...upgrade-phpmailer.sh
# Make it executable
chmod +x upgrade-phpmailer.sh
# Run on your web directories
./upgrade-phpmailer.sh /var/www /home/*/public_html
Command options
# Dry run - see what would be upgraded without making changes
./upgrade-phpmailer.sh -n /var/www
# Verbose output
./upgrade-phpmailer.sh -v /var/www
# Debug mode
./upgrade-phpmailer.sh -d /var/www
# Custom backup directory
./upgrade-phpmailer.sh -D /backups/phpmailer /var/www
# Specify GitHub branch
./upgrade-phpmailer.sh -B v5.2.21 /var/www
How it works
- Finds installations: Recursively searches specified directories for
class.phpmailer.php - Creates backups: Copies existing files with
.BACKUPextension before replacing - Downloads latest version: Fetches current files from the official PHPMailer GitHub repository
- Preserves permissions: Maintains original file ownership and permissions
Verification
After running the script, verify the upgrade by checking the version in the PHPMailer class:
grep "VERSION" /path/to/class.phpmailer.php
# Should show: public $Version = '5.2.21';
Lessons learned
This incident highlights several important security practices:
- Use Composer: Modern dependency management makes security updates much easier
- Monitor CVEs: Subscribe to security advisories for libraries you use
- Automate patching: Have scripts ready for emergency security updates
- Audit your servers: Know what software is installed and where
Need help with security auditing or patching? Get in touch.
De kwetsbaarheden
Beveiligingsonderzoeker Dawid Golunski ontdekte twee kritieke kwetsbaarheden in PHPMailer die remote code execution mogelijk maken:
- CVE-2016-10033: PHPMailer < 5.2.18 Remote Code Execution
- CVE-2016-10045: PHPMailer < 5.2.20 Remote Code Execution (0day Patch Bypass)
De tweede kwetsbaarheid was een bypass van de initiële patch, wat de reden is dat je versie 5.2.20 of hoger nodig hebt om volledig beschermd te zijn.
Het probleem: meerdere installaties
Als je servers beheert die meerdere PHP-applicaties hosten, heb je waarschijnlijk PHPMailer op tientallen verschillende locaties geïnstalleerd — elke WordPress site, elk Laravel project, elke custom applicatie. Het handmatig upgraden van elk ervan is tijdrovend en foutgevoelig.
De oplossing: geautomatiseerd upgrade script
Ik heb upgrade-phpmailer.sh gemaakt, een shell script dat automatisch alle PHPMailer installaties op je server vindt en upgradet. Het downloadt de laatste veilige versie van GitHub en vervangt de core bestanden terwijl het backups maakt.
Bijgewerkte bestanden
Het script upgradet deze drie core PHPMailer componenten:
class.phpmailer.phpclass.pop3.phpclass.smtp.php
Basisgebruik
# Download het script
wget https://gist.githubusercontent.com/Magentron/...upgrade-phpmailer.sh
# Maak het uitvoerbaar
chmod +x upgrade-phpmailer.sh
# Voer uit op je web directories
./upgrade-phpmailer.sh /var/www /home/*/public_html
Command opties
# Dry run - zie wat geüpgraded zou worden zonder wijzigingen te maken
./upgrade-phpmailer.sh -n /var/www
# Verbose output
./upgrade-phpmailer.sh -v /var/www
# Debug modus
./upgrade-phpmailer.sh -d /var/www
# Custom backup directory
./upgrade-phpmailer.sh -D /backups/phpmailer /var/www
# Specificeer GitHub branch
./upgrade-phpmailer.sh -B v5.2.21 /var/www
Hoe het werkt
- Vindt installaties: Zoekt recursief in gespecificeerde directories naar
class.phpmailer.php - Maakt backups: Kopieert bestaande bestanden met
.BACKUPextensie voordat ze vervangen worden - Downloadt laatste versie: Haalt huidige bestanden op van de officiële PHPMailer GitHub repository
- Behoudt permissies: Handhaaft originele bestand ownership en permissies
Verificatie
Controleer na het uitvoeren van het script de upgrade door de versie in de PHPMailer class te checken:
grep "VERSION" /path/to/class.phpmailer.php
# Zou moeten tonen: public $Version = '5.2.21';
Geleerde lessen
Dit incident benadrukt verschillende belangrijke beveiligingspraktijken:
- Gebruik Composer: Modern dependency management maakt security updates veel eenvoudiger
- Monitor CVEs: Abonneer je op security advisories voor libraries die je gebruikt
- Automatiseer patching: Heb scripts klaar staan voor nood security updates
- Audit je servers: Weet welke software waar geïnstalleerd is
Hulp nodig bij security auditing of patching? Neem contact op.
Las vulnerabilidades
El investigador de seguridad Dawid Golunski descubrió dos vulnerabilidades críticas en PHPMailer que permiten la ejecución remota de código:
- CVE-2016-10033: PHPMailer < 5.2.18 Ejecución Remota de Código
- CVE-2016-10045: PHPMailer < 5.2.20 Ejecución Remota de Código (Bypass de Parche 0day)
La segunda vulnerabilidad fue un bypass del parche inicial, por lo que necesitas la versión 5.2.20 o superior para estar completamente protegido.
El problema: múltiples instalaciones
Si administras servidores que alojan múltiples aplicaciones PHP, probablemente tengas PHPMailer instalado en docenas de ubicaciones diferentes — cada sitio WordPress, cada proyecto Laravel, cada aplicación personalizada. Actualizar manualmente cada uno consume tiempo y es propenso a errores.
La solución: script de actualización automática
Creé upgrade-phpmailer.sh, un script de shell que encuentra y actualiza automáticamente todas las instalaciones de PHPMailer en tu servidor. Descarga la última versión segura desde GitHub y reemplaza los archivos principales mientras crea copias de seguridad.
Archivos actualizados
El script actualiza estos tres componentes principales de PHPMailer:
class.phpmailer.phpclass.pop3.phpclass.smtp.php
Uso básico
# Descargar el script
wget https://gist.githubusercontent.com/Magentron/...upgrade-phpmailer.sh
# Hacerlo ejecutable
chmod +x upgrade-phpmailer.sh
# Ejecutar en tus directorios web
./upgrade-phpmailer.sh /var/www /home/*/public_html
Opciones de comando
# Ejecución en seco - ver qué se actualizaría sin hacer cambios
./upgrade-phpmailer.sh -n /var/www
# Salida detallada
./upgrade-phpmailer.sh -v /var/www
# Modo debug
./upgrade-phpmailer.sh -d /var/www
# Directorio de backup personalizado
./upgrade-phpmailer.sh -D /backups/phpmailer /var/www
# Especificar rama de GitHub
./upgrade-phpmailer.sh -B v5.2.21 /var/www
Cómo funciona
- Encuentra instalaciones: Busca recursivamente en los directorios especificados
class.phpmailer.php - Crea copias de seguridad: Copia los archivos existentes con extensión
.BACKUPantes de reemplazarlos - Descarga la última versión: Obtiene los archivos actuales del repositorio oficial de PHPMailer en GitHub
- Preserva permisos: Mantiene la propiedad y permisos originales de los archivos
Verificación
Después de ejecutar el script, verifica la actualización comprobando la versión en la clase PHPMailer:
grep "VERSION" /path/to/class.phpmailer.php
# Debería mostrar: public $Version = '5.2.21';
Lecciones aprendidas
Este incidente destaca varias prácticas de seguridad importantes:
- Usa Composer: La gestión moderna de dependencias hace que las actualizaciones de seguridad sean mucho más fáciles
- Monitorea CVEs: Suscríbete a avisos de seguridad para las bibliotecas que utilizas
- Automatiza el parcheo: Ten scripts listos para actualizaciones de seguridad de emergencia
- Audita tus servidores: Conoce qué software está instalado y dónde
¿Necesitas ayuda con auditoría de seguridad o parcheo? Ponte en contacto.