{"id":"CVE-2026-15743","title":"Catalyst::Plugin::Static::Simple versions through 0.38 for Perl mark responses as publicly cacheable","summary":"Catalyst::Plugin::Static::Simple versions through 0.38 for Perl mark responses as publicly cacheable.\n\nThe _serve_static method always sets the Cache-Control header to \"public\", with no means of overriding it.  This advises proxies that …","severity":"medium","cvss":5.7,"cvssVector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:N/A:N","cvssSource":"adp","cwe":["CWE-524"],"product":"Catalyst-Plugin-Static-Simple","affected":["Catalyst-Plugin-Static-Simple <= 0.38"],"ssvc":{"exploitation":"none","automatable":"no","technicalImpact":"partial","timestamp":"2026-08-28T15:06:14.898370Z"},"published":"2026-08-20","updated":"2026-10-19","sourceUpdated":"2026-10-19T18:25:25.600Z","source":"CVEORG","sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-15743","references":[{"url":"https://github.com/perl-catalyst/Catalyst-Plugin-Static-Simple/pull/3"},{"url":"https://security.metacpan.org/patches/C/Catalyst-Plugin-Static-Simple/0.38/CVE-2026-15743-r1.patch"},{"url":"https://datatracker.ietf.org/doc/html/rfc9111"}],"tags":["cve.org"],"epss":0.00322,"epssPercentile":0.23796,"ingestedAt":"2026-10-19T18:35:50.122Z","slug":"CVE-2026-15743","body":"## Overview\n\nCatalyst::Plugin::Static::Simple versions through 0.38 for Perl mark responses as publicly cacheable.\n\nThe _serve_static method always sets the Cache-Control header to \"public\", with no means of overriding it.  This advises proxies that the content may be stored in a shared cache, and may be reused in responses to requests from other users. (This includes requests with an Authorization header.)\n\nConfiguring the expires time to \"0\" to disable caching, as documented, is ignored.\n\n## Affected\n\n- `Catalyst-Plugin-Static-Simple <= 0.38`\n\n## Remediation\n\nRefer to the linked advisories for vendor-supplied fixes and affected version ranges.\n\n### Workarounds\n\nApply the patch, and configure the default Cache-Control as needed.\n\nFor deployments that cannot apply the patch, a method modifier of _serve_static in the Catalyst class can be used to override the Cache-Control or Expires headers as needed, for example:\n\n    around _serve_static => sub {\n        my ( $next, $c, $path, $cache_control ) = @_;\n\n        $c->$next($path);\n\n        my $config = $c->config->{'Plugin::Static::Simple'};\n        $cache_control ||= $config->{cache_control} || \"public\";\n\n        if ( defined $config->{expires} ) {\n\n            if ( $config->{expires} <= 0 ) {\n                $cache_control = 'no-store';\n                $c->res->headers->expires(0);\n            }\n            else {\n                $c->res->headers->expires( time() + $config->{expires} );\n            }\n        }\n\n        $c->res->headers->header( 'Cache-Control' => $cache_control );\n        return 1;\n    };","depth":"sunlit","depthScore":31,"depthScoreParts":{"impact":31.4,"likelihood":0.1,"exploitation":0,"ransomware":0},"changes":[]}