UNIX Symbolic Link (Symlink) Following

Incomplete Compound
Structure: Composite
Description

This vulnerability occurs when a software application opens files or directories without properly checking if they are symbolic links (symlinks). If an attacker can create or control a symlink, they can redirect file operations to locations outside the intended directory, potentially accessing or modifying unauthorized files.

Extended Description

In Unix-like systems, symbolic links are shortcuts that point to other files or directories. When an application uses paths that can contain symlinks—whether from internal logic or user-supplied input—an attacker can create a malicious symlink that points anywhere in the filesystem. This bypasses the application's intended directory restrictions, allowing the attacker to traverse to sensitive locations they shouldn't access. Without proper validation, the application will follow the symlink and perform operations like reading, writing, or deleting on the target file. This means an attacker could expose confidential data, corrupt critical system files, or escalate privileges by manipulating files originally protected by normal permissions. The core issue is that the application trusts the path structure without verifying that symlinks haven't redirected it outside its allowed scope.

Common Consequences 1
Scope: ConfidentialityIntegrity

Impact: Read Files or DirectoriesModify Files or Directories

Potential Mitigations 2
Phase: Implementation
Symbolic link attacks often occur when a program creates a tmp directory that stores files/links. Access to the directory should be restricted to the program as to prevent attackers from manipulating the files.
Phase: Architecture and Design

Strategy: Separation of Privilege

Follow the principle of least privilege when assigning access rights to entities in a software system. Denying access to a file can prevent an attacker from replacing that file with a link to a sensitive file. Ensure good compartmentalization in the system to provide protected areas that can be trusted.
Observed Examples 13
CVE-1999-1386Some versions of Perl follow symbolic links when running with the -e option, which allows local users to overwrite arbitrary files via a symlink attack.
CVE-2000-1178Text editor follows symbolic links when creating a rescue copy during an abnormal exit, which allows local users to overwrite the files of other users.
CVE-2004-0217Antivirus update allows local users to create or append to arbitrary files via a symlink attack on a logfile.
CVE-2003-0517Symlink attack allows local users to overwrite files.
CVE-2004-0689Possible interesting example
CVE-2005-1879Second-order symlink vulnerabilities
CVE-2005-1880Second-order symlink vulnerabilities
CVE-2005-1916Symlink in Python program
CVE-2000-0972Setuid product allows file reading by replacing a file being edited with a symlink to the targeted file, leaking the result in error messages when parsing fails.
CVE-2005-0824Signal causes a dump that follows symlinks.
CVE-2015-3629A Libcontainer used in Docker Engine allows local users to escape containerization and write to an arbitrary file on the host system via a symlink attack in an image when respawning a container.
CVE-2020-26277In a MySQL database deployment tool, users may craft a maliciously packaged tarball that contains symlinks to files external to the target and once unpacked, will execute.
CVE-2021-21272"Zip Slip" vulnerability in Go-based Open Container Initiative (OCI) registries product allows writing arbitrary files outside intended directory via symbolic links or hard links in a gzipped tarball.
References 3
Second-Order Symlink Vulnerabilities
Steve Christey
Bugtraq
07-06-2005
ID: REF-493
Crafting Symlinks for Fun and Profit
Shaun Colley
Infosec Writers Text Library
12-04-2004
ID: REF-494
The Art of Software Security Assessment
Mark Dowd, John McDonald, and Justin Schuh
Addison Wesley
2006
ID: REF-62
Likelihood of Exploit

High

Applicable Platforms
Languages:
Not Language-Specific : Undetermined
Modes of Introduction
Implementation
Related Attack Patterns
Alternate Terms

Symlink following

symlink vulnerability

Functional Areas
  1. File Processing
Affected Resources
  1. File or Directory
Taxonomy Mapping
  • PLOVER
Notes
Research Gap Symlink vulnerabilities are regularly found in C and shell programs, but all programming languages can have this problem. Even shell programs are probably under-reported. "Second-order symlink vulnerabilities" may exist in programs that invoke other programs that follow symlinks. They are rarely reported but are likely to be fairly common when process invocation is used [REF-493].