The Code Log

Welcome to my blog, a space where I share insights, lessons, and best practices from building secure, scalable web applications and SaaS solutions. From tackling complex development challenges to exploring modern tools, frameworks, and security techniques, this is where I document what works, what doesn’t.

docker.sock Mounted in a Container: Escaping to Root on the Host via the Docker API

The container runs as root and mounts `/var/run/docker.sock`, turning Post #2 RCE into full host compromise. With no docker binary and no credentials, an attacker curls the Docker HTTP API over the Unix socket, creates a privileged container with the host root filesystem mounted at `/mnt/host`, and chroots in as `uid=0` on the host. Covers why only the root `dvla-admin` container can open the socket (the non-root `dvla-horizon` worker cannot), and the fixes: remove the mount, run non-root, use a socket proxy, or switch to rootless Docker or Podman.

Sep 7, 2026

Redis with No Authentication: How Your Laravel Horizon Queue Worker Becomes a Backdoor

Redis service runs with no password on the built-in default ACL user, so anyone on the internal dvla-net can RPUSH a job straight into the Horizon queue. Because Laravel's queue worker rebuilds each job with unserialize(), a phpggc gadget chain dropped into data.command executes the moment the worker pops it, no APP_KEY or admin session required. This post walks the full chain, from enumerating Redis through confirming worker-level RCE (Monolog/RCE8) and landing a reverse shell.

Aug 31, 2026

SSRF in Laravel: How a 'Fetch Banner from URL' Feature Bridges Into the Internal Network

A blog editor's 'fetch banner from a URL' shortcut calls Http::get() on whatever you type, with no scheme, host, or IP checks, so an admin session becomes a free port scanner for the internal Docker network. Each error that comes back is an oracle: an empty reply means Redis, a refused connection means a closed port, and a clean 200 means you can read whatever's on the other end. Pair it with Post 1's mass-assignment bug and Redis is one polite form field away, no shell required.

Aug 24, 2026

Open Redirect in Laravel: Turning a ?next= Parameter into Token Theft and Account Takeover

An unvalidated ?next= on the legacy contributor login ships a freshly signed SSO token to any host an attacker names. One link, one click, full admin account takeover.

Aug 18, 2026