CVE-2020-19316 - OS Command Injection In Laravel Framework
Original Advisory: https://notes.netbytesec.com/2021/12/os-command-injection-in-laravel.html
Product Description
Laravel is a web application framework with expressive, elegant syntax. We’ve already
laid the foundation — freeing you to create without sweating the small things.
https://laravel.com/
Vulnerable Version
< 5.8.17
Vulnerability Description
1) OS Command Injection found in Filesystem Symlink API (CVE-2020-19316)
When passing crafted user input into the Storage::link()
` will trigger the vulnerability. Exploiting
this issue may allow attacker to execute OS Command with running application privilege.
This vulnerability affect Laravel installation on the Windows operating system only.
Proof of Concept
File: src/Illuminate/Filesystem/Filesystem.php
Line: 257
public function link($target, $link)
{
if (! windows_os()) { // [1]
return symlink($target, $link);
}
$mode = $this->isDirectory($target) ? 'J' : 'H';
exec("mklink /{$mode} \"{$link}\" \"{$target}\""); // [2]
}
OS checking done at [1], if the current OS is not windows the execution will continue. Finally the variable reach [2] code path, which take variable into exec function without any escape. Because the Filesystem API is mapped into Storage facade, we can demonstrate the vulnerability by using this vulnerable code in the controller
Storage::link($request->input('target_folder'), $request->input('link_name'));
Mitigation
The vulnerability is patched on version 5.8.17 and above. Please update your laravel to the latest version.
Timeline
2019-05-10 | Contact Laravel Security Contact (Taylor Otwell) via taylor[at]laravel.com 2019-05-14 | Laravel Version 5.8.17 released 2019-05-14 | Applied for CVE 2021-12-13 | CVE-2020-19316 Assigned 2021-12-16 | Advisory Published