Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
spark-history-zip-symlink — Apache Spark 4.2.0 - उच्च - रिमोट - फ़ाइल पढ़ना - History zip रखे गए symlink का अनुसरण करता है | Kitploit
उपकरण/GitHubGitHub/abraxas/spark-history-zip-symlink
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणजानकारी एकत्र करनापेनिट्रेशन टेस्टिंगपेपर और शोध
GitHubabraxas/spark-history-zip-symlink

spark-history-zip-symlink

Apache Spark 4.2.0 - उच्च - रिमोट - फ़ाइल पढ़ना - History zip रखे गए symlink का अनुसरण करता है

रिपॉजिटरी देखें
55 दिन पहलेअभी तक समीक्षित नहीं

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

सभी देखें →

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

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

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

सभी उपकरण देखें →
साझा करें

Abraxas Labs - spark-history-zip-symlink

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  spark-history-zip-symlink

spark-history-zip-symlink

Class: File read Reach: Remote

Apache Spark 4.2.0 (32f72996) - Apache Software Foundation

CVE-2025-54920 ने History Server Jackson को लॉक कर दिया ताकि sparkEventFromJson केवल SparkListenerEvent सबक्लास ही बनाए। रोलिंग zipEventLogFiles अभी भी हर listStatus चाइल्ड को FileSystem.open के ज़रिए डंप करता है। LocalFileSystem एक POSIX symlink का अनुसरण करता है। eventlog_v2_* में रखा गया चाइल्ड unauth GET /api/v1/applications/{id}/logs में पैक हो जाता है। zip सदस्य का बॉडी SHS-UID टारगेट होता है। एंट्री नाम symlink का basename होता है।

यह Jackson RCE का दोबारा फाइल नहीं है। Jackson बंद ही रहता है। यह होस्ट RCE नहीं है। Integrity और availability कुछ नहीं हैं।

IDअभी कोई CVE नहीं
ClassFile read (CVE-2025-54920 विक्टिम मॉडल का रोलिंग zip अवशेष)
ReachRemote (History log dir का लेखक और zip का unauth GET)
CWECWE-59, CWE-22
CVSSHigh: 7.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
ProductApache Spark
Affected4.2.0 टैग v4.2.0 (32f7299601108917fb01920a54e084595b7b3bf8)
AuthPR:L = spark.history.fs.logDirectory में लिखना (54920 जैसा ही विक्टिम)। History UI ACLs डिफ़ॉल्ट रूप से बंद।
LicenseGNU Affero GPL v3.0
Labकेवल 127.0.0.1:18980

हमलावर क्या कर सकता है

जो कोई spark.history.fs.logDirectory (डिफ़ॉल्ट file:/tmp/spark-events) में लिख सकता है, वह एक रोलिंग dir रख सकता है जिसे History Server zip करेगा। रोलिंग राइटर डिफ़ॉल्ट रूप से चालू। History UI ACLs डिफ़ॉल्ट रूप से बंद। SHS प्रोसेस UID ही confused deputy है।

PrivilegeMethod / sinkLab-proven या inferred
Confidentiality: SHS UID जिस होस्ट फाइल को खोल सकता है उसे पढ़नाeventlog_v2_<id>/ रखें जिसमें वैध appstatus_* और events_* JSON (SparkListenerLogStart / SparkListenerApplicationStart) के साथ एक symlink चाइल्ड हो जिसका टारगेट log dir के बाहर हो। स्कैन की प्रतीक्षा करें। Unauth GET /api/v1/applications/{id}/logs (OneApplicationResource.getEventLogs -> FsHistoryProvider.writeEventLogs -> RollingEventLogFilesFileReader.zipEventLogFiles -> FileSystem.open)Lab-proven। Zip सदस्य eventlog_v2_app-2026-0001/planted-secret का बॉडी SPARK-HISTORY-ZIP-SYMLINK-WITNESS है। Events सदस्य में कोई witness नहीं। एंट्री नाम symlink का basename ही रहता है, टारगेट पाथ नहीं।
Confidentiality: सिबलिंग टेनेंट का event log जिसे हमलावर open (660) नहीं कर सकतावही zip, symlink टारगेट दूसरे ऐप का logInferred। वही FileSystem.open। आज़माया नहीं गया।
Confidentiality: keytab, spark-env.sh, /etc/passwd यदि SHS उन्हें पढ़ सकता हैवही zipInferred। Oracle एक समर्पित /secret/host-secret है, वे फाइलें नहीं।
SHS या होस्ट फाइलों की Integrityzip को HTTP बॉडी में पढ़ा जाता हैClosed। Lab-proven कुछ नहीं।
SHS या होस्ट फाइलों की Availabilityzip टारगेट को डिलीट या ट्रंकेट नहीं करताClosed। Lab-proven कुछ नहीं।
Host RCE / Jackson gadget constructJsonProtocol.sparkEventFromJsonClosed। SparkListenerEvent आवश्यक। यह लैब केवल benign Event JSON रखती है।
एंट्री नाम में ../ का zip slipPath.getName()Closed। POSIX फाइलनाम में / नहीं हो सकता। एंट्री eventlog_v2_<id>/<basename> है।
resolveLogPath का path-string escapenew Path(logDir, attempt.logPath)Closed। Path ऑब्जेक्ट कॉन्फ़िगर किए गए log dir के अंदर ही रहता है। Escape inode है।
टारगेट का compaction rewrite / cleaner deletespark.history.fs.eventLog.rolling.maxFilesToRetain डिफ़ॉल्ट Integer.MAX_VALUE; cleaner डिफ़ॉल्ट बंदClosed। symlink का लोकल fs.delete लिंक को unlink करता है, टारगेट को नहीं।
Unauth job submit / ML model loadSECURITY.md FAQ / docs/ml-security.mdClosed। डिज़ाइन से, यह अवशेष नहीं।

मैंने इसे कैसे खोजा

मैंने apache/spark v4.2.0 (32f7299601108917fb01920a54e084595b7b3bf8) को पिन किया, master या 4.3 RC को नहीं। अट्ठाईस hunts। इस peel पर Jackson History RCE बंद है (JsonProtocol.scala:965-972)। History Server अभी भी हमलावर-लेखन-योग्य log dir की ओर इशारा करता था, जो CVE-2025-54920 जैसा ही विक्टिम मॉडल है।

zipEventLogFiles सभी files को zip करता है, केवल event फाइलों को नहीं:

override def zipEventLogFiles(zipStream: ZipOutputStream): Unit = {
  val dirEntryName = rootPath.getName + "/"
  zipStream.putNextEntry(new ZipEntry(dirEntryName))
  files.foreach { file =>
    addFileAsZipEntry(zipStream, file.getPath, dirEntryName + file.getPath.getName)
  }
}

addFileAsZipEntry पहले fileSystem.open फिर transferTo है। LocalFileSystem POSIX symlinks का अनुसरण करता है। getLogDirInfo टिप्पणी करता है "handles symbolic links properly" और फिर display नाम के लिए unresolved Path parents पर चलता है।

पहले से दर्ज गलत रास्ते: SPARK-52381 को पूरी History कहानी मानना; witness को events_* में रखना (लैब उसमें फेल होती है); zip एंट्री के टारगेट पाथ ले जाने की अपेक्षा; resolveLogPath prefix-join को escape मानना; इस pin पर HiveConnection Event क्लास आज़माना।

Lab

python3 spark-history-zip-symlink-Abraxas-Labs.py

या

cd lab
./run.sh

EventLogFileReaders.scala रोलिंग zip डंप का gadget, पूरा History Server नहीं और आधिकारिक spark:4.2.0 इमेज नहीं। यह Jackson के ज़रिए Event JSON पार्स नहीं करता। Loopback 127.0.0.1:18980। Compose प्रोजेक्ट spark-history-zip-symlink। रोलिंग dir में वैध appstatus_* + events_* (witness रहित) और planted-secret -> /secret/host-secret है।

SUCCESS SPARK-HISTORY-ZIP-SYMLINK SPARK-HISTORY-ZIP-SYMLINK-WITNESS

समाधान

केवल events_* / appstatus_* चाइल्ड पैक करें, हर listStatus नाम नहीं। no-follow (O_NOFOLLOW / Hadoop no-symlink विकल्प) के साथ खोलें और ऐसे चाइल्ड को अस्वीकार करें जिसका realpath spark.history.fs.logDirectory के बाहर हो। display-name हेल्पर realpath जाँच नहीं है।

संदर्भ

टूल डाउनलोड करें