Laravel Framework XSS in Blade templating engine
A security researcher has disclosed a possible XSS vulnerability in the Blade templating engine. Given the following two Blade templates: resources/views/parent.blade.php: html @section('content') @show resources/views/child.blade.php: html @extends('parent') @section('content') @endsection And a route like the follow…
As published by the sources
Affected packages
- illuminate/viewAffected
<6.20.42 || >=7.0.0,<7.30.6 || >=8.0.0,<8.75.0Fixed in6.20.427.30.68.75.0 - Affected
<6.20.42 || >=7.0.0,<7.30.6 || >=8.0.0,<8.75.0Fixed in6.20.427.30.68.75.0
Derived from the fixed versions above
What to do
Upgrade illuminate/view to the fixed version in your release line: 6.20.42, 7.30.6, 8.75.0.
composer update illuminate/view --with-dependenciesUpgrade laravel/framework to the fixed version in your release line: 6.20.42, 7.30.6, 8.75.0.
composer update laravel/framework --with-dependencies
To see which version you have installed, run composer show vendor/package. Running composer audit lists the known advisories that match your installed versions.
Quoted from the original advisory
Details
A security researcher has disclosed a possible XSS vulnerability in the Blade templating engine.
Given the following two Blade templates:
resources/views/parent.blade.php:
@section('content')
<input value="{{ $value }}">
@show
resources/views/child.blade.php:
@extends('parent')
@section('content')
<input value="{{ $value }}">
@endsection
And a route like the following:
Route::get('/example', function() { $value = '//localhost/###parent-placeholder-040f06fd774092478d450774f5ba30c5da78acc8## onclick=location.assign(this.value);//'; return view('child', ['value' => $value]); });
The broken HTML element may be clicked and the user is taken to another location in their browser due to XSS. This is due to the user being able to guess the parent placeholder SHA-1 hash by trying common names of sections. If the parent template contains an exploitable HTML structure an XSS vulnerability can be exposed.
This vulnerability has been patched by determining the parent placeholder at runtime and using a random hash that is unique to each request.
References
- Advisoryhttps://github.com/laravel/framework/security/advisories/GHSA-66hf-2p6w-jqfw
- Advisoryhttps://nvd.nist.gov/vuln/detail/CVE-2021-43808
- Webhttps://github.com/laravel/framework/pull/39906
- Webhttps://github.com/laravel/framework/pull/39908
- Webhttps://github.com/laravel/framework/pull/39909
- Webhttps://github.com/laravel/framework/commit/b8174169b1807f36de1837751599e2828ceddb9b
- Webhttps://github.com/FriendsOfPHP/security-advisories/blob/master/illuminate/view/CVE-2021-43808.yaml
- Webhttps://github.com/FriendsOfPHP/security-advisories/blob/master/laravel/framework/CVE-2021-43808.yaml
- Packagehttps://github.com/laravel/framework
- Webhttps://github.com/laravel/framework/releases/tag/v6.20.42
- Webhttps://github.com/laravel/framework/releases/tag/v7.30.6
- Webhttps://github.com/laravel/framework/releases/tag/v8.75.0