GHSA-8p2x-5cpm-qrqw
AVideo vulnerable to IP Address Spoofing via Untrusted HTTP Headers in getRealIpAddr()
Packages
| Ecosystem | Package | Affected | Fixed in |
|---|---|---|---|
| Packagist | wwbn/avideo | <= 26.0 | no fix listed |
Details
As written in the advisory (Markdown source, shown as plain text).
## Summary
The `getRealIpAddr()` function in `objects/functions.php` trusts user-controlled HTTP headers to determine the client's IP address.
An attacker can spoof their IP address by sending forged headers, bypassing any IP-based access controls or audit logging.
## Vulnerable Code
File: `objects/functions.php`
```php
$headers = [
'HTTP_X_REAL_IP',
'HTTP_CLIENT_IP',
'HTTP_X_FORWARDED_FOR',
'REMOTE_ADDR'
];
foreach ($headers as $header) {
if (!empty($_SERVER[$header])) {
$ips = explode(',', $_SERVER[$header]);
foreach ($ips as $ipCandidate) {
$ipCandidate = trim($ipCandidate);
if (filter_var($ipCandidate, FILTER_VALIDATE_IP,
FILTER_FLAG_IPV4)) {
return $ipCandidate;
}
}
}
}
```
## Attack Scenario
1. Attacker sends request with forged header:
```
X-Client-IP: 127.0.0.1
```
or
```
X-Real-IP: 192.168.1.1
```
2. `getRealIpAddr()` returns the forged IP
3. Any IP-based rate limiting, access control, or audit
log that relies on this function is bypassed
## Proof of Concept
```bash
curl -H "X-Client-IP: 127.0.0.1" \
https://target.com/any_endpoint.php
```
The server now believes the request came from localhost.
## Impact
- Bypass IP-based rate limiting
- Bypass IP-based access controls
- Forge audit log entries
- Potential privilege escalation if localhost is trusted
References
External links from the advisory. They lead to third-party sites.