Check the report below, then download or share it. Download PDF Open PDF Back to results

MalDet · Static Security Report

sglang

github.com/sgl-project/sglang
Scanned 24 September 2026 at 06:41  ·  Report generated 29 October 2026  ·  Python  ·  36,385 stars
Overall assessment
Critical
Combined score 711  ·  8,729 findings after filtering

Summary

This repository has been flagged as extremely dangerous by automated security tools, with a critical vulnerability score of 588.0 and a malicious-pattern score of 122.0, indicating that the code contains severe risks that could be exploited by attackers or signs of intentional harm. The most serious issues involve the use of dynamic code loading and downloading files from the internet to execute them at runtime, which allows an attacker to potentially run arbitrary malware if the code is shared publicly. Additionally, there are multiple instances where shell commands are started without proper validation, creating a high risk for command injection attacks that could allow attackers to execute system commands on your machine. While some findings relate to standard security practices like using deprecated functions or parsing untrusted XML data, these represent common insecure coding patterns rather than evidence of malicious intent. Because the code is hosted on GitHub and appears to be public, it should not be used in any production environment without a thorough review and complete removal of all identified dangerous components.

Written by a language model running locally on the scanning machine, from the findings in this report. The risk levels above and below were decided by the scoring model, not by this summary.

Risk, by type

MalDet scores two different questions separately, because they call for different responses: code can be badly written without being hostile, and hostile code is not always badly written.

Vulnerability
Critical (588)
Insecure coding an attacker could exploit. Usually mistakes, and usually fixable in place.
Malicious pattern
Critical (122)
Signs the code may be trying to do harm: hidden payloads, credential access, persistence, exfiltration.

What each detector found

DetectorLooks for HighMediumLowTotal
bandit Insecure coding patterns in Python source 17 309 8260 8,586
yara Signatures of malicious behaviour in source files 50 0 71 121
guarddog Malicious package and install-time behaviour 8 2 12 22

259 of 8,729 findings were rated more likely genuine than noise by the classifier.

Evidence

Identical findings are grouped, so a single rule firing many times takes one row. Ordered worst first. “Seen” is how many times that finding occurred.

SeverityDetectorFindingSeenExample location
high guarddog Detects suspicious autostart persistence mechanisms [threat-filesystem-autostart] 2 /python/sglang/multimodal_gen/runtime/utils/profiler.py:202
high guarddog Detects dynamic code loading: downloading and importing/executing code at runtime [threat-runtime-dynamic-loader] 3 /python/sglang/srt/utils/common.py:4515
high guarddog Detects download-and-execute patterns: fetching a remote file then executing it [threat-process-download-exec] 3 /python/sglang/kernels/aot/setup_metal.py:69
high bandit tarfile.extractall used without any validation. Please check and discard dangerous members. 1 /scripts/ci/slurm/analyze_logs_with_modal.py:85
high bandit By default, jinja2 sets autoescape to False. Consider using autoescape=True or use the select_autoescape function to mitigate XSS vulnerabilities. 1 /python/sglang/srt/parser/template_detection.py:106
high bandit Starting a process with a shell, possible injection detected, security issue. 4 /scripts/playground/lora/analyzer.py:19
high bandit subprocess call with shell=True identified, security issue. 11 /scripts/code_sync/copy_from_oss.py:135
high yara YARA rule matched: detect_credential_harvester — References credential/secret material by name AND a deliberate outbound-send API in the same file - narrower than \'reads any env var\', which large legitimate codebases do constantly regardless of intent. Still not proof the two are connected (YARA c 6 /benchmark/hicache/bench_serving.py
high yara YARA rule matched: detect_anti_analysis — Checks for a debugger, VM, or sandbox before continuing - a common malware evasion technique, essentially never present in ordinary application code 2 /python/sglang/multimodal_gen/runtime/utils/perf_logger.py
high yara YARA rule matched: detect_base64_exec — Encoded payload decoded and then executed 5 /python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/minimax_h3/material_io.py
high yara YARA rule matched: detect_download_and_execute — Downloads a remote resource AND executes it - the actually dangerous combination, not just downloading alone 29 /scripts/ci_monitor/ci_auto_bisect.py
high yara YARA rule matched: detect_persistence_mechanism — Modifies a startup/scheduling location - legitimate application code essentially never does this 8 /docker/arm64.Dockerfile
medium bandit Using xml.etree.ElementTree.XMLParser to parse untrusted XML data is known to be vulnerable to XML attacks. Replace xml.etree.ElementTree.XMLParser with its defusedxml equivalent function or make sure defusedxml.defuse_stdlib() is called 2 /python/sglang/srt/function_call/minicpm5_detector.py:115
medium guarddog Detects unicode homoglyphs and uncommon characters used for obfuscation [threat-runtime-obfuscation-unicode] 1 /benchmark/bench_linear_attention/bench_cutedsl_kda_decode.py:434
medium bandit Use of insecure and deprecated function (mktemp). 1 /benchmark/hicache/bench_buffer_mode.py:261
medium bandit Chmod setting a permissive mask 0o755 on file (script_path). 1 /python/sglang/multimodal_gen/benchmarks/datasets.py:175
medium guarddog Detects access to sensitive files (credentials, configs, keys) [threat-filesystem-read] 1 /sgl-model-gateway/scripts/run_benchmarks.py:181
medium bandit Using xml.etree.ElementTree.fromstring to parse untrusted XML data is known to be vulnerable to XML attacks. Replace xml.etree.ElementTree.fromstring with its defusedxml equivalent function or make sure defusedxml.defuse_stdlib() is called 2 /python/sglang/srt/function_call/minicpm5_detector.py:118
medium bandit Use of unsafe PyTorch load 14 /python/sglang/multimodal_gen/tools/build_modelopt_fp8_transformer.py:630
medium bandit Use of weak SHA1 hash for security. Consider usedforsecurity=False 14 /python/sglang/srt/model_loader/loader.py:2088
medium bandit Use of weak MD5 hash for security. Consider usedforsecurity=False 1 /scripts/ci/cuda/warmup_deep_gemm.py:387
medium bandit Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected. 16 /.claude/skills/sglang-prod-incident-triage/scripts/incident_artifact_tool.py:57
medium bandit Possible SQL injection vector through string-based query construction. 11 /python/sglang/srt/utils/rpd_utils.py:215
medium bandit Use of possibly insecure function - consider using safer ast.literal_eval. 6 /python/sglang/srt/utils/rank_consensus_checker.py:246
medium bandit Use of exec detected. 2 /benchmark/io/bench_mm_token_padding.py:58
medium bandit Pickle and modules that wrap it can be unsafe when used to deserialize untrusted data, possible security issue. 33 /benchmark/hicache/data_processing.py:459
medium bandit Possible binding to all interfaces. 30 /python/sglang/srt/entrypoints/sidecar.py:35
medium bandit Probable insecure usage of temp file/directory. 39 /python/sglang/srt/utils/stale_shm_cleanup.py:20
medium bandit Call to requests without timeout 39 /python/sglang/srt/entrypoints/http_server.py:2335
medium bandit Unsafe Hugging Face Hub download without revision pinning in snapshot_download() 11 /python/sglang/srt/debug_utils/model_truncator.py:57
medium bandit Unsafe Hugging Face Hub download without revision pinning in hf_hub_download() 6 /python/sglang/srt/model_loader/loader.py:2763
medium bandit Unsafe Hugging Face Hub download without revision pinning in load_dataset() 5 /benchmark/asr/bench_sglang.py:268
medium bandit Unsafe Hugging Face Hub download without revision pinning in from_pretrained() 76 /scripts/playground/lora/lora_hf_play.py:21
low bandit Possible hardcoded password: '...' 1 /scripts/playground/lora/lora_hf_play.py:8
low bandit Possible hardcoded password: '<image>' 12 /python/sglang/srt/multimodal/processors/internvl.py:46
low bandit Possible hardcoded password: '<tool_call>' 9 /python/sglang/srt/function_call/glm47_moe_detector.py:311
low bandit Possible hardcoded password: '</tool_call>' 5 /python/sglang/srt/function_call/mimo_detector.py:155
low bandit Possible hardcoded password: 'image' 4 /python/sglang/multimodal_gen/configs/pipeline_configs/longcat_image.py:102
low bandit Possible hardcoded password: '[IMG]' 4 /python/sglang/srt/multimodal/processors/pixtral.py:30
low bandit Possible hardcoded password: '<|begin_of_image|>' 2 /python/sglang/srt/multimodal/processors/glm4v.py:457
low bandit Possible hardcoded password: '<|video_pad|>' 2 /python/sglang/srt/multimodal/processors/minicpmv4_6.py:334
low bandit Possible hardcoded password: 'concat_steps' 2 /python/sglang/srt/debug_utils/comparator/aligner/token_aligner/entrypoint.py:57
low bandit Possible hardcoded password: '<im_patch>' 2 /python/sglang/srt/multimodal/processors/step3_vl.py:342
low bandit Possible hardcoded password: '<|tool▁calls▁end|>' 2 /python/sglang/srt/function_call/deepseekv31_detector.py:48
low bandit Possible hardcoded password: '<|end_of_image|>' 2 /python/sglang/srt/multimodal/processors/glm4v.py:458
low bandit Possible hardcoded password: '<|tool_calls_end|>' 1 /python/sglang/srt/function_call/step3_detector.py:67
low bandit Possible hardcoded password: '</think>' 1 /python/sglang/srt/function_call/deepseekv41_detector.py:20
low bandit Possible hardcoded password: '</slice>' 1 /python/sglang/srt/multimodal/processors/minicpmv4_6.py:347
low bandit Possible hardcoded password: '<|patch|>' 1 /python/sglang/srt/configs/muse_glimmer_processing.py:232
low bandit Possible hardcoded password: '__sglang_reasoning_end_token_ids' 1 /python/sglang/srt/sampling/sampling_params.py:52
low bandit Possible hardcoded password: '<|action_end|>' 1 /python/sglang/srt/function_call/internlm_detector.py:51
low bandit Possible hardcoded password: 'ff1' 1 /python/sglang/srt/mem_cache/storage/tensorcast_store/tensorcast_store.py:56
low bandit Possible hardcoded password: '|DSML|' 1 /python/sglang/srt/function_call/deepseekv32_detector.py:74
low bandit Possible hardcoded password: '<|tools_suffix|>' 1 /python/sglang/srt/parser/reasoning_parser.py:1566
low bandit Possible hardcoded password: '<|END_TEXT|>' 1 /python/sglang/srt/parser/reasoning_parser.py:1773
low bandit Possible hardcoded password: '<|END_ACTION|>' 1 /python/sglang/srt/function_call/cohere_command4_detector.py:27
low bandit Possible hardcoded password: '</image>' 1 /python/sglang/srt/multimodal/processors/minicpmv4_6.py:345
low bandit Possible hardcoded password: '<|python_tag|>' 1 /python/sglang/srt/function_call/llama32_detector.py:30
low bandit Possible hardcoded password: '✅' 1 /scripts/ci/utils/runner_utilization_report.py:26
low bandit Possible hardcoded password: '<pad>' 1 /python/sglang/srt/multimodal/processors/pixtral.py:29

Showing the 60 most significant of 187 distinct findings. The counts in the previous section cover all of them.

How to read this report