{"id":"CVE-2026-112358","kind":"vulnerability","aliases":["CVE-2026-112358"],"related":[],"title":"TiBillet Lespass: image URL import enables server-side request forgery","description":"A weakness has been identified in TiBillet Lespass up to 10e87909c5d526dffa6d424c104fc12860740537. This vulnerability affects the function get_img_from_url of the file ApiBillet/serializers.py of the component APIv1. Executing a manipulation of the argument img_url/image_url can lead to server-side request forgery. The attack can be launched remotely. A high complexity level is associated with this attack. It is stated that the exploitability is difficult. The vendor confirms: \"[T]he fix (destination IP validation, redirect re-checks, timeout and size limit on remote image download) is already planned in our v2 API, which replaces the affected v1 endpoints. The v1 API, including the three affected serializers, will be removed in our next major release.\"","summary":"The TiBillet Lespass API v1 serializer get_img_from_url fetches a remote image from a user-supplied img_url or image_url without validating the destination. An attacker can make the server send requests to hosts it can reach, such as internal services.","severity":"medium","cvss":4.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["lespass","package","python","self-hosted","tibillet"],"not_affected_if":["v2-api-only"],"how_to_check":"- Check whether the deployment exposes the v1 API endpoints that use ApiBillet/serializers.py (get_img_from_url), for example by listing routes that accept img_url or image_url.\n- Confirm the installed Lespass revision against `10e87909c5d526dffa6d424c104fc12860740537`.","fix":"- No fixed version is named in the sources. The vendor says the v1 API, including the three affected serializers, will be removed in the next major release, and the fix is planned in v2.\n- Until then, restrict or block access to the v1 endpoints at the network or proxy layer, and block outbound requests from the application server to internal addresses.","status":"open","published_at":"2026-10-19T22:17:06+00:00","first_seen_at":"2026-10-23T21:57:19+00:00","triaged_at":"2026-10-25T04:39:31+00:00","updated_at":"2026-10-25T04:39:31+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-10-25T04:39:31Z","model":"claude-haiku-5-5","output":{"fix":"- No fixed version is named in the sources. The vendor says the v1 API, including the three affected serializers, will be removed in the next major release, and the fix is planned in v2.\n- Until then, restrict or block access to the v1 endpoints at the network or proxy layer, and block outbound requests from the application server to internal addresses.","reach":"internet","title":"TiBillet Lespass: image URL import enables server-side request forgery","impact":"medium","summary":"The TiBillet Lespass API v1 serializer get_img_from_url fetches a remote image from a user-supplied img_url or image_url without validating the destination. An attacker can make the server send requests to hosts it can reach, such as internal services.","category":"package","nicknames":[],"who_cares":["lespass","tibillet","self-hosted","python"],"confidence":0.6,"needs_auth":"unknown","worst_case":"Server can be made to request internal hosts and return their responses.","analyst_note":"Confirm the affected v1 endpoints, whether authentication is required, and whether a fixed release exists, using the NVD entry https://nvd.nist.gov/vuln/detail/CVE-2026-112358 and the TiBillet repository.","how_to_check":"- Check whether the deployment exposes the v1 API endpoints that use ApiBillet/serializers.py (get_img_from_url), for example by listing routes that accept img_url or image_url.\n- Confirm the installed Lespass revision against `10e87909c5d526dffa6d424c104fc12860740537`.","needs_analyst":true,"not_affected_if":["v2-api-only"],"who_is_affected":"Deployments of TiBillet Lespass that run the v1 API with the get_img_from_url serializer, where the endpoint accepts image URLs from callers. The sources do not say which deployment setups are exposed beyond this, so the exact scope is unknown. Teams that do not run Lespass or do not expose the v1 API are likely unaffected.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"unknown"},"cost_usd":0.000699,"input_tokens":3473,"output_tokens":704,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-112358':14A,17A '-2026':13A,16A '10e87909':80C 'affect':84C,169C,178C 'alreadi':160C 'api':28B,165C,174C 'apibillet/serializers.py':94C 'apiv1':98C 'argument':104C 'associ':126C 'attack':54B,116C,129C 'c5d526dffa6d424c104fc12860740537':81C 'check':150C 'complex':123C 'compon':97C 'confirm':140C 'cve':12A,15A 'destin':52B,144C 'difficult':137C 'download':158C 'enabl':6A 'endpoint':171C 'execut':99C 'exploit':135C 'fetch':35B 'file':93C 'fix':143C 'forgeri':11A,114C 'function':86C 'get':31B,87C 'high':122C 'host':23B,62B 'identifi':74C 'imag':3A,38B,47B,157C 'img':32B,44B,88C,105C 'import':5A 'includ':175C 'intern':68B 'ip':145C 'launch':119C 'lead':108C 'lespass':2A,18B,27B,77C 'level':124C 'limit':154C 'major':186C 'make':56B 'manipul':101C 'next':185C 'packag':19B 'plan':161C 'python':20B 're':149C 're-check':148C 'reach':65B 'redirect':147C 'releas':187C 'remot':37B,120C,156C 'remov':182C 'replac':167C 'request':10A,60B,113C 'self':22B 'self-host':21B 'send':59B 'serial':30B,179C 'server':8A,58B,111C 'server-sid':7A,110C 'servic':69B 'side':9A,112C 'size':153C 'state':132C 'suppli':43B 'three':177C 'tibillet':1A,24B,26B,76C 'timeout':151C 'url':4A,34B,45B,48B,90C 'url/image_url':106C 'user':42B 'user-suppli':41B 'v1':29B,170C,173C 'v2':164C 'valid':50B,146C 'vendor':139C 'vulner':83C 'weak':71C 'without':49B","nicknames":[],"mitigations":[],"who_affected":"Deployments of TiBillet Lespass that run the v1 API with the get_img_from_url serializer, where the endpoint accepts image URLs from callers. The sources do not say which deployment setups are exposed beyond this, so the exact scope is unknown. Teams that do not run Lespass or do not expose the v1 API are likely unaffected.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-19T22:17:06+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:H/AT:N/PR:H/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"cna@vuldb.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-112358","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-112358","severity":null,"published_at":"2026-10-19T22:17:06+00:00","modified_at":"2026-10-20T19:27:34+00:00","first_seen_at":"2026-10-23T21:57:19+00:00","fetched_at":"2026-10-23T22:28:57+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}