Guzzle-kwetsbaarheid controleren met CURLOPT_HTTPAUTH
De kwetsbaarheid waar ik op controleer: https://www.cve.org/CVERecord?id=CVE-2022-31090
Op een debian-systeem heb ik 2 servers gemaakt: 1 server verwijst door naar de hoofdpagina van de tweede server, 2 servers gebruiken basisautorisatie op basis van bestanden.
Het wachtwoordbestand bevat een gebruikersnaam met nick en wachtwoord 12345
Bestand .htaccess:
Code (php)
1
2
3
4
5
2
3
4
5
AuthType Basic
AuthName "Restricted Files"
AuthBasicProvider file
AuthUserFile "/etc/apache2/passwd"
Require valid-user
AuthName "Restricted Files"
AuthBasicProvider file
AuthUserFile "/etc/apache2/passwd"
Require valid-user
Mijn autorisatie werkt succesvol.
Vervolgens installeerde ik guzzle 6.5.0 en maakte het volgende bestand:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'http://site.loc', [
'curl' => [
CURLOPT_HTTPAUTH => 'Basic bmljazoxMjM0NQ=='
],
'debug' => true
]);
var_dump($res->getBody()->getContents());
$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'http://site.loc', [
'curl' => [
CURLOPT_HTTPAUTH => 'Basic bmljazoxMjM0NQ=='
],
'debug' => true
]);
var_dump($res->getBody()->getContents());
Ik heb het bestand uitgevoerd en dit is wat ik zag:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
* Trying 127.0.0.1:80...
* Connected to site.loc (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
Host: site.loc
User-Agent: GuzzleHttp/6.5.0 curl/7.88.1 PHP/7.4.33
< HTTP/1.1 302 Found
< Date: Thu, 28 Dec 2023 13:40:15 GMT
< Server: Apache/2.4.57 (Debian)
< Location: http://test.loc
< Cache-Control: max-age=0
< Expires: Thu, 28 Dec 2023 13:40:15 GMT
< Content-Length: 0
< Content-Type: text/html; charset=UTF-8
<
* Connection #0 to host site.loc left intact
* Trying 127.0.0.1:80...
* Connected to test.loc (127.0.0.1) port 80 (#1)
> GET / HTTP/1.1
Host: test.loc
User-Agent: GuzzleHttp/6.5.0 curl/7.88.1 PHP/7.4.33
< HTTP/1.1 401 Unauthorized
< Date: Thu, 28 Dec 2023 13:40:15 GMT
< Server: Apache/2.4.57 (Debian)
< WWW-Authenticate: Basic realm="Restricted Files"
< Content-Length: 455
< Content-Type: text/html; charset=iso-8859-1
<
* Connection #1 to host test.loc left intact
PHP Fatal error: Uncaught GuzzleHttp\Exception\ClientException: Client error: `GET http://site.loc` resulted in a `401 Unauthorized` response...
* Connected to site.loc (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
Host: site.loc
User-Agent: GuzzleHttp/6.5.0 curl/7.88.1 PHP/7.4.33
< HTTP/1.1 302 Found
< Date: Thu, 28 Dec 2023 13:40:15 GMT
< Server: Apache/2.4.57 (Debian)
< Location: http://test.loc
< Cache-Control: max-age=0
< Expires: Thu, 28 Dec 2023 13:40:15 GMT
< Content-Length: 0
< Content-Type: text/html; charset=UTF-8
<
* Connection #0 to host site.loc left intact
* Trying 127.0.0.1:80...
* Connected to test.loc (127.0.0.1) port 80 (#1)
> GET / HTTP/1.1
Host: test.loc
User-Agent: GuzzleHttp/6.5.0 curl/7.88.1 PHP/7.4.33
< HTTP/1.1 401 Unauthorized
< Date: Thu, 28 Dec 2023 13:40:15 GMT
< Server: Apache/2.4.57 (Debian)
< WWW-Authenticate: Basic realm="Restricted Files"
< Content-Length: 455
< Content-Type: text/html; charset=iso-8859-1
<
* Connection #1 to host test.loc left intact
PHP Fatal error: Uncaught GuzzleHttp\Exception\ClientException: Client error: `GET http://site.loc` resulted in a `401 Unauthorized` response...
Het blijkt dat de kwetsbaarheid niet heeft gewerkt, al had hij moeten inloggen op http://test.loc en de header niet moeten verwijderen.
Wat is er gebeurd en waarom werkt de kwetsbaarheid niet?
Gewijzigd op 28/12/2023 14:48:32 door Maurits Heyman
Er zijn nog geen reacties op dit bericht.