Repository navigation
v1.2.3 — Security fix (tenant symlinks exposing panel files)
This is a security release fixing one critical vulnerability. Every install should upgrade.
Security
- Tenant symlinks could expose the panel's
.env(GHSA-qjrx-xj8f-xcc8). Tenant vhosts allowed Apache to follow any symlink (FollowSymLinks), andAllowOverride Alllet a tenant's.htaccessturn that on for itself. A tenant's PHP could therefore symlink a file outside its home into its website and have Apache serve it. That included the panel's.env, with itsAPP_KEYand MySQL credentials. Tenant vhosts now useSymLinksIfOwnerMatch, so Apache only follows a symlink when the link and the file it points to have the same owner, and a tenant.htaccesscan no longer switch this back.
Existing vhosts are rewritten automatically: by the upgrader on VPS installs, and at boot on Docker installs. The upgrader checks the result with apache2ctl configtest and restores the previous files if Apache rejects them.
Behaviour change
A tenant .htaccess containing Options +FollowSymLinks now makes that site return 500. Drupal's default .htaccess has this line. Change it to Options +SymLinksIfOwnerMatch or remove it. The upgrader lists every affected .htaccess file when it runs.
Upgrading
curl -sSL https://raw.githubusercontent.com/crivion/laranode/refs/heads/main/laranode-scripts/bin/laranode-upgrade.sh | bashOnce it finishes, check that the commit the upgrader prints matches this release, and read the "Hardening tenant Apache vhosts" step for any .htaccess files you need to fix.
Symlinks created before you upgrade stop working too, but anything already read through one is exposed. If you host tenants you don't fully trust, rotate the laranode MySQL password (update DB_PASSWORD in .env to match) and APP_KEY. When rotating APP_KEY:
- Put the old key in
APP_PREVIOUS_KEYSin.env. Backup destination settings and tenant database passwords are stored encrypted with it, and they can't be read without it. - Rotate the credentials of any backup destination (S3 keys, SFTP passwords and so on). Anyone who read the old
.envcould decrypt them from the database.