अपडेट पर वापस जाएँ
New releaseAug 30, 2026

WuppieFuzz v1.7.1

LibAFL के ऊपर विकसित एक कवरेज-निर्देशित REST API फ़ज़र

साझा करें

WuppieFuzz v1.8.0

WuppieFuzz का लोगो।

TNO ने WuppieFuzz विकसित किया है, जो LibAFL के ऊपर विकसित एक कवरेज-गाइडेड REST API फ़ज़र है, जो अंतिम-उपयोगकर्ताओं के व्यापक दर्शकों को लक्षित करता है, जिसमें उपयोग में आसानी, खोजे गए दोषों की व्याख्या-क्षमता और मॉड्यूलरिटी पर विशेष ध्यान दिया गया है। WuppieFuzz परीक्षण की तीनों सेटिंग्स (ब्लैक बॉक्स, ग्रे बॉक्स और व्हाइट बॉक्स) का समर्थन करता है।

[!NOTE]
त्वरित, साथ-साथ चलने वाले मार्गदर्शन के लिए कृपया ट्यूटोरियल का पालन करें!

मीडिया कवरेज

WuppieFuzz को इनमें प्रदर्शित किया गया है:

वैज्ञानिक प्रकाशन

यदि आप अकादमिक कार्य में WuppieFuzz का उद्धरण देना चाहते हैं, तो कृपया CITATION.cff में सूचीबद्ध पसंदीदा प्रकाशन का उपयोग करें:

Rooijakkers, T., Nijsten, A., Daniele, C., Weitenberg, E., Groenewegen, R., & Melissen, A. (2026). WuppieFuzz: Coverage-Guided, Stateful REST API Fuzzing. In Proceedings of the 12th International Conference on Information Systems Security and Privacy (ICISSP), Volume 2, 221-231. SciTePress. https://doi.org/10.5220/0000217100004061

लाइसेंस

WuppieFuzz Apache-2.0 के अंतर्गत लाइसेंस प्राप्त है; देखें LICENSE।
तृतीय-पक्ष लाइसेंस सूचनाएं THIRD_PARTY_NOTICES में सूचीबद्ध हैं।

त्वरित इंस्टॉल

लोकप्रिय ऑपरेटिंग सिस्टम (MacOS, Windows, Linux) के लिए WuppieFuzz की त्वरित स्थापना के लिए releases देखें या brew install wuppiefuzz का उपयोग करें

Docker

आप docker build . -t wuppiefuzz:local के साथ डॉकर इमेज बना सकते हैं। इसका उपयोग करने के लिए, आपको अपने openapi spec वाला फ़ोल्डर माउंट करना होगा। जब आप स्थानीय रूप से चल रही सेवा (डॉकर में नहीं) को फ़ज़ कर रहे हों, तो आपको होस्ट नेटवर्किंग निर्दिष्ट करनी होगी:

docker run \
  --network host \
  -v ./fuzzing-folder:/fuzzing-folder \  # The folder will be populated with wuppiefuzz outputs
  -w /fuzzing-folder \
  wuppiefuzz:local fuzz --timeout 60 --report openapi.json

संक्षिप्त कैसे-करें

How to use WuppieFuzz? - YouTube

विकास के लिए पूर्वापेक्षाएँ

प्रोजेक्ट बनाने के लिए आपको निम्नलिखित निर्भरताएँ और टूलिंग स्थापित करनी होंगी:

sudo apt install -y build-essential pkg-config cmake  # General build tools
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh  # Rust

चलाएँ

WuppieFuzz कार्यरत।

WuppieFuzz चलाने से पहले, आपको अपना (इंस्ट्रुमेंटेड) लक्ष्य एप्लिकेशन शुरू करना होगा।

इसके अतिरिक्त, आपको WuppieFuzz को एक OpenAPI-विनिर्देश प्रदान करना होगा ताकि उसे पता हो कि उसके अनुरोधों को कैसे उत्पन्न और परिवर्तित करना है। कमांड लाइन तर्कों पर सहायता के लिए, निम्नलिखित का उपयोग करें:

$ cargo run -- --help # shows help for required parameters and flags

Usage: wuppiefuzz [OPTIONS] [OPENAPI_SPEC.YAML]
...

उदाहरण के लिए, JaCoCo एजेंट संलग्न Java लक्ष्य के विरुद्ध WuppieFuzz चलाने के लिए, आप उसकी OpenAPI फ़ाइल निर्दिष्ट करते हैं (जिसमें API विनिर्देश में वह URL होता है जिस पर लक्ष्य चल रहा है)। इसके अतिरिक्त, आप निर्दिष्ट करते हैं कि कवरेज प्रारूप JaCoCo है, और classes निर्देशिका इस प्रकार देते हैं:

cargo run -- fuzz openapi.yaml --coverage-format jacoco --jacoco-class-dir ../Targets/app/target/classes/

कॉन्फ़िगरेशन फ़ाइल

यदि आप कमांड लाइन तर्कों के बजाय/के संयोजन में कॉन्फ़िगरेशन फ़ाइल का उपयोग करना चाहते हैं, तो आप --config <CONFIG_FILE> फ़्लैग का उपयोग कर सकते हैं। यदि आप कॉन्फ़िगरेशन फ़ाइल के संयोजन में कमांड लाइन तर्कों का उपयोग करते हैं, तो कमांड लाइन तर्कों को प्राथमिकता मिलती है।

कॉन्फ़िगरेशन फ़ाइल एक yaml फ़ाइल होनी चाहिए और इसमें प्रत्येक कमांड लाइन तर्क के लिए एक पंक्ति होनी चाहिए जिसे आप निर्दिष्ट करना चाहते हैं, उदाहरण के लिए:

coverage_format: jacoco
output_format: human-readable
source_dir: "/swagger-petstore/src/main/java"
jacoco_class_dir: "/swagger-petstore/target"
timeout: 20

इस मामले में एक उदाहरण रन कमांड हो सकता है:

$ cargo run -- fuzz --config=config.yaml --report --coverage-host=localhost:6300 --timeout=10 ./openapi.yaml

यह पंक्ति कमांड लाइन और कॉन्फ़िग फ़ाइल दोनों से तर्कों को संयोजित करेगी। चूंकि --timeout फ़्लैग दोनों में निर्दिष्ट है, कमांड लाइन में निर्दिष्ट टाइमआउट (10 सेकंड) को प्राथमिकता मिलेगी।

example_configs/ निर्देशिका में आपको Java कोड के लिए JaCoCo के साथ कवरेज रिपोर्ट उत्पन्न करने और Python कोड के लिए LCOV के साथ कवरेज रिपोर्ट उत्पन्न करने के लिए उपयोग की जाने वाली दो उदाहरण कॉन्फ़िग फ़ाइलें मिलेंगी।

रिपोर्ट

जब आप --report फ़्लैग के साथ WuppieFuzz चलाते हैं, तो reports/ के अंदर एक उपनिर्देशिका बनाई जाती है जिसका नाम टाइमस्टैम्प होता है। सभी समर्थित कवरेज रिपोर्ट इस उपनिर्देशिका में लिखी जाती हैं। दो प्रकार की कवरेज रिपोर्ट हैं:

  1. एंडपॉइंट कवरेज: यह हमेशा उत्पन्न की जा सकती है क्योंकि इसके लिए केवल OpenAPI-spec की आवश्यकता होती है।
  2. कोड कवरेज: वर्तमान में केवल JaCoCo के लिए समर्थित है, लेकिन हम और अधिक का समर्थन करने का लक्ष्य रखते हैं। मुश्किल हिस्सा यह है कि इसके लिए कवरेज से स्रोत फ़ाइलों तक मैपिंग और इसका उपयोग करने वाली मजबूत रिपोर्ट जनरेशन की आवश्यकता होती है।

इसके अतिरिक्त, आपके फ़ज़िंग अभियान से संबंधित सभी अनुरोध जानकारी से एक डेटाबेस भरा जाता है। इस डेटाबेस को Grafana डैशबोर्ड के माध्यम से देखा और खोजा जा सकता है।

इस रिपॉजिटरी की संरचना

  • assets: लोगो, छवियाँ, आदि।
  • coverage_agents: विभिन्न लक्ष्यों पर कवरेज ट्रैकिंग के लिए कोड और निर्देश
  • example_configs: WuppieFuzz को कॉन्फ़िगर करने के लिए उदाहरण कॉन्फ़िगरेशन फ़ाइलें
  • src: WuppieFuzz का स्रोत कोड
  • tutorial: किसी विशिष्ट लक्ष्य को फ़ज़ करने और फ़ज़िंग परिणामों की व्याख्या करने के तरीके पर एक गहन और निम्न-स्तरीय ट्यूटोरियल
  • dashboard: फ़ज़िंग परिणामों और प्रदर्शन को ट्राइएज करने के लिए टूलिंग

इनमें से प्रत्येक के बारे में अधिक जानकारी के लिए, इन निर्देशिकाओं में README देखें।

विकास बिल्ड

डिफ़ॉल्ट रूप से, WuppieFuzz अपनी C निर्भरताओं (OpenSSL, SQLite, Z3) को वेंडर करता है ताकि एक नियमित cargo build बिना किसी अतिरिक्त सेटअप के काम करे। विकास के दौरान तेज़ संकलन के लिए, आप सभी वेंडर की गई निर्भरताओं को अक्षम कर सकते हैं और इसके बजाय सिस्टम-स्थापित लाइब्रेरीज़ के विरुद्ध लिंक कर सकते हैं।

[!NOTE] z3 क्रेट के लिए Z3 4.15+ की आवश्यकता होती है, जो अधिकांश Linux वितरण पैकेज प्रबंधकों द्वारा भेजे जाने वाले संस्करण से नया है। संगत संस्करण प्राप्त करने के लिए Homebrew (brew install z3) के माध्यम से Z3 स्थापित करें।

सिस्टम निर्भरताएँ

अपने सिस्टम पर निम्नलिखित लाइब्रेरीज़ स्थापित करें:

Debian/Ubuntu:

sudo apt install libssl-dev libsqlite3-dev
brew install z3  # apt's libz3-dev is too old; use Homebrew instead

श्रेणियाँ