<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Wed, 07 Oct 2026 21:37:46 +0000</lastBuildDate>
    <item>
      <title>GHSA-prpw-wwv7-xjjr — Coraza: Native audit-log format allows CRLF injection and log forgery via request body and header fields</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-prpw-wwv7-xjjr</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/corazawaf/coraza/v3&lt;/p&gt;
&lt;p&gt;## Root Cause&lt;/p&gt;
&lt;p&gt;File: `internal/auditlog/formats.go` — multiple sites write attacker-influenced bytes into the Native audit-log stream without escaping `\r` or `\n`:&lt;/p&gt;
&lt;p&gt;```go
// Part B — request headers (lines 72–80)
for k, vv := range al.Transaction().Request().Headers() {
    for _, v := range vv {
        res.WriteByte(&amp;#39;\n&amp;#39;)
        res.WriteString(k)
        res.WriteString(&amp;#34;: &amp;#34;)
        res.WriteString(v)   // ← raw
    }
}&lt;/p&gt;
&lt;p&gt;// Part C — request body (lines 85–86)
if body := al.Transaction().Request().Body(); body != &amp;#34;&amp;#34; {
    res.WriteString(body)    // ← raw
    res.WriteByte(&amp;#39;\n&amp;#39;)
}&lt;/p&gt;
&lt;p&gt;// Part E — response body (lines 93–94)      raw
// Part F — response headers (lines 111–118) raw
// Part H — error messages (line 125)        raw
// Part K — matched-rule raw data (line 151)  raw
```&lt;/p&gt;
&lt;p&gt;The Native format&amp;#39;s section structure is line-based: sections are delimited by lines of the form `--&amp;lt;10-char-random-prefix&amp;gt;-&amp;lt;Part&amp;gt;--`, and line-based log parsers / SIEM rules rely on that structure. Any attacker-controlled bytes containing `\n` break the structural invariant and allow the attacker to inject lines that look like genuine audit content.&lt;/p&gt;
&lt;p&gt;The other two Native-format implementations in Coraza are not affected: the JSON formatter (`formats_json.go`) and the OCSF formatter both round-trip values through `json.Marshal`, which escapes `\r` and `\n`.&lt;/p&gt;
&lt;p&gt;## Impact&lt;/p&gt;
&lt;p&gt;An attacker who can land bytes into any of the listed audit-log fields can inject arbitrary lines — including lines that visual…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/corazawaf/coraza/v3&lt;/p&gt;
&lt;p&gt;## Root Cause&lt;/p&gt;
&lt;p&gt;File: `internal/auditlog/formats.go` — multiple sites write attacker-influenced bytes into the Native audit-log stream without escaping `\r` or `\n`:&lt;/p&gt;
&lt;p&gt;```go
// Part B — request headers (lines 72–80)
for k, vv := range al.Transaction().Request().Headers() {
    for _, v := range vv {
        res.WriteByte(&amp;#39;\n&amp;#39;)
        res.WriteString(k)
        res.WriteString(&amp;#34;: &amp;#34;)
        res.WriteString(v)   // ← raw
    }
}&lt;/p&gt;
&lt;p&gt;// Part C — request body (lines 85–86)
if body := al.Transaction().Request().Body(); body != &amp;#34;&amp;#34; {
    res.WriteString(body)    // ← raw
    res.WriteByte(&amp;#39;\n&amp;#39;)
}&lt;/p&gt;
&lt;p&gt;// Part E — response body (lines 93–94)      raw
// Part F — response headers (lines 111–118) raw
// Part H — error messages (line 125)        raw
// Part K — matched-rule raw data (line 151)  raw
```&lt;/p&gt;
&lt;p&gt;The Native format&amp;#39;s section structure is line-based: sections are delimited by lines of the form `--&amp;lt;10-char-random-prefix&amp;gt;-&amp;lt;Part&amp;gt;--`, and line-based log parsers / SIEM rules rely on that structure. Any attacker-controlled bytes containing `\n` break the structural invariant and allow the attacker to inject lines that look like genuine audit content.&lt;/p&gt;
&lt;p&gt;The other two Native-format implementations in Coraza are not affected: the JSON formatter (`formats_json.go`) and the OCSF formatter both round-trip values through `json.Marshal`, which escapes `\r` and `\n`.&lt;/p&gt;
&lt;p&gt;## Impact&lt;/p&gt;
&lt;p&gt;An attacker who can land bytes into any of the listed audit-log fields can inject arbitrary lines — including lines that visual…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-prpw-wwv7-xjjr</guid>
    </item>
  </channel>
</rss>
