Dominik Schmidt created TIKA-4826:
-------------------------------------

             Summary: MimeTypes.forName interns unknown media types into an 
unbounded map (slow memory growth on untrusted-input paths)
                 Key: TIKA-4826
                 URL: https://issues.apache.org/jira/browse/TIKA-4826
             Project: Tika
          Issue Type: Bug
            Reporter: Dominik Schmidt


MimeTypes.forName(String) (tika-core, MimeTypes.java:351) is called during 
content detection to turn a type hint into a MimeType: MimeTypes.detect runs 
applyHint, which calls forName(typeName) for the caller's Content-Type. For a 
syntactically valid but unknown type, forName creates a new MimeType and 
registers it via add(mime) / types.put(...) into an internal map that is never 
bounded or evicted (lines 359-369).

A caller that can influence the type string reaching detection can therefore 
drive slow, unbounded memory growth by sending a stream of unique, 
syntactically-valid, unknown media types (for example application/x-<random>). 
This is reachable today from the tika-server request Content-Type on the direct 
endpoints, and TIKA-4825 adds the tika-pipes FetchEmitTuple path as another 
route to the same lookup.

Severity is low (it needs many requests with distinct crafted types, and growth 
is slow), but it is an avoidable footgun on an untrusted-input path, and it is 
a shared/static registry so growth persists for the JVM lifetime.

Proposed fix: use a non-registering lookup in the detection path. applyHint 
only needs to know whether the hinted type equals or specializes a known type; 
it does not need to intern unknown types. Either add a 
MimeTypes.detect/applyHint variant that resolves a hint against the existing 
registry without adding, or bound/evict the registration map.

Note: discovered during review of TIKA-4825 (apache/tika#3039); flagged there 
as pre-existing and out of scope for that PR.




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to