The Goobi viewer is a web application that allows digitised material to be displayed in a web browser. From version 24.03 to before version 26.05, ExternalFilesDownloader.getFilename() extracts the destination filename from a server-supplied Content-Disposition response header and passes it directly to Path.resolve() without stripping directory components. This allows for a malicious HTTP server that the viewer fetches from to supply an absolute path or ../ traversal sequences as the filename, writing attacker-controlled content to an arbitrary path writable by the Tomcat process. When targeting the deployed web-application directory, this yields remote code execution as the tomcat OS user. This issue has been patched in version 26.05.
{
"cna_assigner": "GitHub_M",
"cwe_ids": [
"CWE-22",
"CWE-73"
],
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/46xxx/CVE-2026-46652.json"
}{
"extracted_events": [
{
"range": [
{
"introduced": "24.03"
},
{
"fixed": "26.05"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StringRangeExpression"
},
{
"range": [
{
"fixed": "5281245708447ae3419cb42492fbb8af731a2ce5"
}
],
"source": "REFERENCES_COMMIT"
},
{
"original_tag": "v26.05",
"range": [
{
"fixed": "7e5e9de18c572c7b96f80efe01254bf08dc4cdb4"
}
],
"source": "REFERENCES_TAG"
}
]
}
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-46652.json"
[
{
"deprecated": false,
"digest": {
"function_hash": "76737708323490671307672657125259109568",
"length": 491
},
"id": "CVE-2026-46652-0dd6f31d",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/intranda/goobi-viewer-core/commit/5281245708447ae3419cb42492fbb8af731a2ce5",
"target": {
"file": "goobi-viewer-core/src/main/java/io/goobi/viewer/model/viewer/ViewManager.java",
"function": "loadExternalResourceUrls"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "106402485554899524395314101304609415349",
"length": 1014
},
"id": "CVE-2026-46652-192dc2d1",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/intranda/goobi-viewer-core/commit/5281245708447ae3419cb42492fbb8af731a2ce5",
"target": {
"file": "goobi-viewer-core/src/main/java/io/goobi/viewer/model/files/external/ExternalFilesDownloader.java",
"function": "downloadHttpResource"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "299465923679625129777857620543158450320",
"length": 184
},
"id": "CVE-2026-46652-27a295dd",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/intranda/goobi-viewer-core/commit/5281245708447ae3419cb42492fbb8af731a2ce5",
"target": {
"file": "goobi-viewer-core/src/main/java/io/goobi/viewer/model/viewer/ViewManager.java",
"function": "getExternalResourceUrls"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "15972731808254145666261176205669785459",
"length": 2933
},
"id": "CVE-2026-46652-2ad86a12",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/intranda/goobi-viewer-core/commit/7e5e9de18c572c7b96f80efe01254bf08dc4cdb4",
"target": {
"file": "goobi-viewer-core/src/main/java/io/goobi/viewer/managedbeans/SearchBean.java",
"function": "getAdvancedSearchSelectItems"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "55373763876506741160533861096182947701",
"length": 395
},
"id": "CVE-2026-46652-31934e0a",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/intranda/goobi-viewer-core/commit/5281245708447ae3419cb42492fbb8af731a2ce5",
"target": {
"file": "goobi-viewer-core/src/main/java/io/goobi/viewer/model/files/external/ExternalFilesDownloader.java",
"function": "downloadExternalFiles"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "214082505072598991716962068944808016831",
"length": 460
},
"id": "CVE-2026-46652-38938516",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/intranda/goobi-viewer-core/commit/5281245708447ae3419cb42492fbb8af731a2ce5",
"target": {
"file": "goobi-viewer-core/src/main/java/io/goobi/viewer/controller/Configuration.java",
"function": "getExternalResourceUrlTemplates"
}
},
{
"deprecated": false,
"digest": {
"line_hashes": [
"293943419837386175782308880630292377328",
"170127000326944715759514306120173437552",
"223072314872435556758862870822129730388",
"184713866145576581573500654664532882358",
"237588089203428832734919670992173305409",
"280990611135733430789396002312530922372",
"24011410402069477058498461939093920262",
"243679154761233145932008628234109855606",
"21245126937807009457669850870559185657",
"157573805690410280521963065924689943951",
"49299172231513956195727309028396980246",
"249794867519244567083176728280977870199",
"71331133885813258577251813447387200972",
"231280190624403314206933099108260677099",
"131064644070503162456003862872168843296",
"228717970448403275474455688186333628072",
"147229437546344567055115541779032048353",
"296771280783092075493187168226162854698",
"120686590177198208650842153671343843197",
"185110271319730517681325665849978046676",
"133072927174758095098837509638475082729",
"106915568864856288436707486586529388843",
"160461748305160759432425790653772593920",
"317668832181560233029467657143735579550",
"73682667438275365798270958473607512942",
"249449434883737352069413629640348278192",
"195647711537184443325539778426838681880",
"257419450339920369642547725144123517283",
"112254453685341924447530792146304337784",
"200506628299564351230936520852436132030",
"99422724347327295676833174058837105043",
"141225596712123407189091063186974358645",
"281192752199487692721550185112564389005",
"194840973750847596253923718843247966422",
"336380174445271318603843347024206517237",
"96952457555478317003593573357220284563",
"288939005615045911177043736404399404541",
"328674136467211459900128018005816102742",
"75851200508167515578606821188405267014",
"230110937255770512631639417010960709132",
"243367955632336005134513142238333853843",
"253728686788632627169401501763323725722",
"28196279546092511104474535655606889983",
"240985082911872732109250870253022523110",
"7405899224190688798808783959628142002",
"91368197618688457157980371544354479789",
"158697872569671941832991527465912955348",
"305106691200856417832257034142201370878",
"289336218389088023408326258965270312936",
"32131413311487982245812841291902270705",
"133528045941229369766499737505022324454",
"118600259359074066127455075675860467005",
"277131013592039677111080227322086714878",
"12132793595964136568255504321677124068",
"237513637503532782536650314870439478037",
"203609570456295320982548574336354293445",
"51906176174227463930981612168786621659",
"198425266314817376550601752740401743673",
"239541424654697691920923576302018587810",
"4477980581229884955895429889103133623",
"65554406765763519915522339427629544886"
],
"threshold": 0.9
},
"id": "CVE-2026-46652-46a7ca97",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/intranda/goobi-viewer-core/commit/7e5e9de18c572c7b96f80efe01254bf08dc4cdb4",
"target": {
"file": "goobi-viewer-core/src/main/java/io/goobi/viewer/managedbeans/SearchBean.java"
}
},
{
"deprecated": false,
"digest": {
"line_hashes": [
"228290816233981740507221904153784625183",
"316392729770960068137958280905167349177",
"20252846280030098481294537028674119849",
"265696207954840649163536196987436350714"
],
"threshold": 0.9
},
"id": "CVE-2026-46652-481ae854",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/intranda/goobi-viewer-core/commit/5281245708447ae3419cb42492fbb8af731a2ce5",
"target": {
"file": "goobi-viewer-core/src/main/java/io/goobi/viewer/controller/Configuration.java"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "80050939882449251482287647859133592846",
"length": 292
},
"id": "CVE-2026-46652-4913ceab",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/intranda/goobi-viewer-core/commit/5281245708447ae3419cb42492fbb8af731a2ce5",
"target": {
"file": "goobi-viewer-core/src/main/java/io/goobi/viewer/model/files/external/ExternalFilesDownloader.java",
"function": "checkHttpResource"
}
},
{
"deprecated": false,
"digest": {
"line_hashes": [
"172036081619728264536544836022424920576",
"206262415591075143195014707826825852740",
"160032195307483152179728616949622498999",
"282161237875046225444754169489884877002",
"132108408661853093970109855011338221981",
"28478075218801398287275379985148282232",
"284753550502011747695405436594164909886",
"176908227494880128665329177559840609716",
"153675016924976758166007005213202671482",
"288690527470119013389424754516090411753",
"205098214255486405439562099235035222167",
"148954859319084339565663033661081729317",
"20465985720902283124755590941999225388",
"55142651690219658327487283770170577477",
"214425688006711146829706937447001439791",
"260879421169726657963994483969978910922",
"109739466360607804678814684134440234150",
"36412447194584549571086838493076223541",
"173701140012002931983719472796449051759",
"262805346583614128346995888780065571178",
"98826498306568040237426355090843674411"
],
"threshold": 0.9
},
"id": "CVE-2026-46652-6c70c086",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/intranda/goobi-viewer-core/commit/5281245708447ae3419cb42492fbb8af731a2ce5",
"target": {
"file": "goobi-viewer-core/src/main/java/io/goobi/viewer/websockets/DownloadTaskEndpoint.java"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "50489312385463977554948546991265001746",
"length": 997
},
"id": "CVE-2026-46652-985199da",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/intranda/goobi-viewer-core/commit/5281245708447ae3419cb42492fbb8af731a2ce5",
"target": {
"file": "goobi-viewer-core/src/main/java/io/goobi/viewer/websockets/DownloadTaskEndpoint.java",
"function": "onMessage"
}
},
{
"deprecated": false,
"digest": {
"line_hashes": [
"46878440448091772417511226788801768367",
"76754536853848593023514482015793192076",
"75971827331914051826655070387523342044",
"49899328514912669300887188423938086948",
"232180690905111500886237000712207656747",
"56926609594750345628030697665364727179",
"169253853054120947418774628309155383395",
"331954715067789150434276552221668545994",
"325532051219885859897221313823114111538",
"84567926099992410006983589717489229599",
"134437330219077746911136874912815776816",
"333127822100339668159167389501121316993",
"98187646478974661766651679420399300755",
"126417909114650127219113800004230261918",
"6044296525230556214003668201947837253",
"283268639007526871573710841073445071606",
"141190670289558489065592614168993891976",
"315356759156828604957583358939411599787",
"288717453621594439387056226257504258455",
"243504218000033026319846544006683645871",
"339694707936292365402825273492007272446",
"218816235474873895594908710775382576107",
"150825795303050326441476488127129665465",
"84865560178765520536914361739171979211",
"312939871089883545174542364170622786530",
"23665400425324184739205394500239981107",
"284027730988393224976989038745450934518"
],
"threshold": 0.9
},
"id": "CVE-2026-46652-ac43f516",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/intranda/goobi-viewer-core/commit/5281245708447ae3419cb42492fbb8af731a2ce5",
"target": {
"file": "goobi-viewer-core/src/main/java/io/goobi/viewer/model/viewer/ViewManager.java"
}
},
{
"deprecated": false,
"digest": {
"line_hashes": [
"58534034612165146162516628574392220547",
"279058887333202353401553292302684944662",
"4755541367937704021289046467018827467",
"310708302149679191361245907308485601334",
"80698763899084003966887548490038437237",
"163257403754885274667512177220676599379",
"203131200185598794150515540360321653521",
"79385461869888998336632050043295060649",
"199015985062901047016818062987179482872",
"244699249134842210378916973202631529613",
"282037970412512135824075459072120099488",
"123846567515973387315777774546812853984",
"65164806190641594165264081285911982077",
"312635219160953768652662386347201063590",
"331672067817297614022487545413179841772",
"156862111356747941235766827548492589645",
"60011013475405092931108765700974046330",
"327420071189808858919896565590037419341",
"202053132523294565985670804179037101865",
"174300228488637910881312402971948381635",
"194349314531069912836852025720825800647",
"117614238786495092823934560625373704235",
"113770494852118217936413161455866389220",
"116778411354805563602337080123080689793",
"60940997672715323076559174651983499178",
"129131245367182511362551760541614646219",
"140517186258675304361107442287295058773",
"142575938046256148414713357361065742224",
"194697294559222193623634127526123683568",
"83770756804738936927580466448997134349",
"304455828019382186366194270644843119607",
"310597936761264251478804897717862830603",
"92119391774427986708360176948865716248",
"68869387031170061513197020380642396220",
"219448375093103482120369618497838122333",
"311552702258616960843468296464179676049",
"221113473640010856635408088843736880515",
"284448017566455639517316028890362438876",
"226584991637411042824917509296044670870",
"29092110712191111270582187327357643561",
"125286447263770015532608310606991253652",
"282450949284237182320717096645478644261",
"57738360317354562657242151951645951480",
"317792037785699978829162996787129419959",
"39736829627435811709421939997217670728",
"165429691163410291253507887426159205126",
"156127724874891383902504403643214712230",
"222208825463063098269430493735200565449",
"213601858264940852465961656875343396614"
],
"threshold": 0.9
},
"id": "CVE-2026-46652-bff8ff9d",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/intranda/goobi-viewer-core/commit/5281245708447ae3419cb42492fbb8af731a2ce5",
"target": {
"file": "goobi-viewer-core/src/main/java/io/goobi/viewer/model/files/external/ExternalFilesDownloader.java"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "35593499378208335899006932559420075394",
"length": 511
},
"id": "CVE-2026-46652-ca5fdfa7",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/intranda/goobi-viewer-core/commit/5281245708447ae3419cb42492fbb8af731a2ce5",
"target": {
"file": "goobi-viewer-core/src/main/java/io/goobi/viewer/model/files/external/ExternalFilesDownloader.java",
"function": "resourceExists"
}
},
{
"deprecated": false,
"digest": {
"line_hashes": [
"255085158912242990149154061937887950366",
"334794444803940586033471419990234207055",
"195028072747198060985453424721312375518",
"133385654581509549223818728611932846293",
"46394507573639897272812200072770341846",
"286169140829845435556544899460533511296"
],
"threshold": 0.9
},
"id": "CVE-2026-46652-ebc9f4b7",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/intranda/goobi-viewer-core/commit/5281245708447ae3419cb42492fbb8af731a2ce5",
"target": {
"file": "goobi-viewer-core/src/test/java/io/goobi/viewer/model/files/external/ExternalFilesDownloaderTest.java"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "202694403147738395954402808185936590360",
"length": 753
},
"id": "CVE-2026-46652-f5e729cb",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/intranda/goobi-viewer-core/commit/5281245708447ae3419cb42492fbb8af731a2ce5",
"target": {
"file": "goobi-viewer-core/src/main/java/io/goobi/viewer/model/files/external/ExternalFilesDownloader.java",
"function": "getFilename"
}
}
]
"2026-11-01T07:03:43Z"