{"id":"CVE-2025-54489","aliases":["DEBIAN-CVE-2025-54489","EUVD-2025-25674","GHSA-54vg-hcf2-vf9w","UBUNTU-CVE-2025-54489"],"status":"published","title":"A stack-based buffer overflow vulnerability exists in the MFER parsing functionality of The...","description":"A stack-based buffer overflow vulnerability exists in the MFER parsing functionality of The Biosig Project libbiosig 3.9.0 and Master Branch (35a819fa). A specially crafted MFER file can lead to arbitrary code execution. An attacker can provide a malicious file to trigger this vulnerability.This vulnerability manifests on line 8970 of biosig.c on the current master branch (35a819fa), when the Tag is 63:\r\n\r\n                else if (tag==63) {\r\n                    uint8_t tag2=255, len2=255;\r\n\r\n                    count = 0;\r\n                    while ((count\u003clen) \u0026\u0026 !(FlagInfiniteLength \u0026\u0026 len2==0 \u0026\u0026 tag2==0)){\r\n                        curPos += ifread(\u0026tag2,1,1,hdr);\r\n                        curPos += ifread(\u0026len2,1,1,hdr);\r\n                        if (VERBOSE_LEVEL==9)\r\n                            fprintf(stdout,\"MFER: tag=%3i chan=%2i len=%-4i tag2=%3i len2=%3i curPos=%i %li count=%4i\\n\",tag,chan,len,tag2,len2,curPos,iftell(hdr),(int)count);\r\n\r\n                        if (FlagInfiniteLength \u0026\u0026 len2==0 \u0026\u0026 tag2==0) break;\r\n\r\n                        count  += (2+len2);\r\n                        curPos += ifread(\u0026buf,1,len2,hdr);\r\n\r\nHere, the number of bytes read is not the Data Length decoded from the current frame in the file (`len`) but rather is a new length contained in a single octet read from the same input file (`len2`). Despite this, a stack-based buffer overflow condition can still occur, as the destination buffer is still `buf`, which has a size of only 128 bytes, while `len2` can be as large as 255.","severity":{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-12","score":0.00706,"percentile":0.53887,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-121"],"published":"2025-08-25T13:53:46Z","modified":"2026-10-17T12:57:08Z","fixes":[{"ecosystem":"Debian:14","package":"biosig","fixed_in":["3.9.5-1"],"sources":["osv"]}],"affected":[{"source":"osv","ecosystem":"Debian:12","package":"biosig","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.5.0-1","2.5.2-1","2.5.2-2","2.6.0-1","2.6.1-1","3.9.0-1","3.9.5-1"]},{"source":"osv","ecosystem":"Debian:13","package":"biosig","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["3.9.0-1","3.9.5-1"]},{"source":"osv","ecosystem":"Debian:14","package":"biosig","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.9.5-1"}]}],"versions":["3.9.0-1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:22.04:LTS","package":"biosig","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.1.2-4","2.1.2-4build1","2.1.2-4build2","2.3.3-1","2.3.3-1build1","2.3.3-1build2","2.3.3-1ubuntu0.1~esm1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:24.04:LTS","package":"biosig","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.5.0-1build2","2.5.2-1","2.5.2-1build1","2.5.2-2","2.6.0-1","2.6.0-1build1","2.6.0-1ubuntu1","2.6.0-1ubuntu1+esm1"]},{"source":"osv","ecosystem":"Ubuntu:25.10","package":"biosig","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.6.1-1build3","3.9.0-1"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"biosig","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["3.9.0-1build3","3.9.5-1","3.9.5-1build1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:26.04:LTS","package":"biosig","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["3.9.0-1","3.9.0-1build1","3.9.0-1build2","3.9.0-1build3","3.9.0-1ubuntu0.1~esm1"]}],"products":[{"vendor":"libbiosig_project","product":"libbiosig"},{"vendor":"the biosig project","product":"libbiosig"}],"references":[{"url":"https://talosintelligence.com/vulnerability_reports/TALOS-2025-2234","tags":["Exploit","Third Party Advisory","evidence","report"]},{"url":"https://www.talosintelligence.com/vulnerability_reports/TALOS-2025-2234","tags":["web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2025-54489"},{"url":"https://github.com/advisories/GHSA-54vg-hcf2-vf9w"},{"url":"https://security-tracker.debian.org/tracker/CVE-2025-54489","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2025-54489","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2025-54489","tags":["report"]},{"url":"https://sourceforge.net/p/biosig/mailman/message/59224259/","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2025-54489","description":"A stack-based buffer overflow vulnerability exists in the MFER parsing functionality of The Biosig Project libbiosig 3.9.0 and Master Branch (35a819fa). A specially crafted MFER file can lead to arbitrary code execution. An attacker can provide a malicious file to trigger this vulnerability.This vulnerability manifests on line 8970 of biosig.c on the current master branch (35a819fa), when the Tag is 63:\r\n\r\n                else if (tag==63) {\r\n                    uint8_t tag2=255, len2=255;\r\n\r\n                    count = 0;\r\n                    while ((count\u003clen) \u0026\u0026 !(FlagInfiniteLength \u0026\u0026 len2==0 \u0026\u0026 tag2==0)){\r\n                        curPos += ifread(\u0026tag2,1,1,hdr);\r\n                        curPos += ifread(\u0026len2,1,1,hdr);\r\n                        if (VERBOSE_LEVEL==9)\r\n                            fprintf(stdout,\"MFER: tag=%3i chan=%2i len=%-4i tag2=%3i len2=%3i curPos=%i %li count=%4i\\n\",tag,chan,len,tag2,len2,curPos,iftell(hdr),(int)count);\r\n\r\n                        if (FlagInfiniteLength \u0026\u0026 len2==0 \u0026\u0026 tag2==0) break;\r\n\r\n                        count  += (2+len2);\r\n                        curPos += ifread(\u0026buf,1,len2,hdr);\r\n\r\nHere, the number of bytes read is not the Data Length decoded from the current frame in the file (`len`) but rather is a new length contained in a single octet read from the same input file (`len2`). Despite this, a stack-based buffer overflow condition can still occur, as the destination buffer is still `buf`, which has a size of only 128 bytes, while `len2` can be as large as 255.","status":"published","published":"2025-08-25T13:53:46.34Z","modified":"2025-11-03T18:13:30.624Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"cna"}],"cwes":["CWE-121"],"updated_at":"2026-11-02T14:32:27.28543Z"}],"euvd":[{"id":"EUVD-2025-25674","description":"A stack-based buffer overflow vulnerability exists in the MFER parsing functionality of The Biosig Project libbiosig 3.9.0 and Master Branch (35a819fa). A specially crafted MFER file can lead to arbitrary code execution. An attacker can provide a malicious file to trigger this vulnerability.This vulnerability manifests on line 8970 of biosig.c on the current master branch (35a819fa), when the Tag is 63:\r\n\r\n                else if (tag==63) {\r\n                    uint8_t tag2=255, len2=255;\r\n\r\n                    count = 0;\r\n                    while ((count\u003clen) \u0026\u0026 !(FlagInfiniteLength \u0026\u0026 len2==0 \u0026\u0026 tag2==0)){\r\n                        curPos += ifread(\u0026tag2,1,1,hdr);\r\n                        curPos += ifread(\u0026len2,1,1,hdr);\r\n                        if (VERBOSE_LEVEL==9)\r\n                            fprintf(stdout,\"MFER: tag=%3i chan=%2i len=%-4i tag2=%3i len2=%3i curPos=%i %li count=%4i\\n\",tag,chan,len,tag2,len2,curPos,iftell(hdr),(int)count);\r\n\r\n                        if (FlagInfiniteLength \u0026\u0026 len2==0 \u0026\u0026 tag2==0) break;\r\n\r\n                        count  += (2+len2);\r\n                        curPos += ifread(\u0026buf,1,len2,hdr);\r\n\r\nHere, the number of bytes read is not the Data Length decoded from the current frame in the file (`len`) but rather is a new length contained in a single octet read from the same input file (`len2`). Despite this, a stack-based buffer overflow condition can still occur, as the destination buffer is still `buf`, which has a size of only 128 bytes, while `len2` can be as large as 255.","status":"published","published":"2025-08-25T13:53:46Z","modified":"2025-11-03T18:13:30Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T19:49:34.635725Z"}],"ghsa":[{"id":"GHSA-54vg-hcf2-vf9w","title":"A stack-based buffer overflow vulnerability exists in the MFER parsing functionality of The...","description":"A stack-based buffer overflow vulnerability exists in the MFER parsing functionality of The Biosig Project libbiosig 3.9.0 and Master Branch (35a819fa). A specially crafted MFER file can lead to arbitrary code execution. An attacker can provide a malicious file to trigger this vulnerability.This vulnerability manifests on line 8970 of biosig.c on the current master branch (35a819fa), when the Tag is 63:\n\n                else if (tag==63) {\n                    uint8_t tag2=255, len2=255;\n\n                    count = 0;\n                    while ((count\u003clen) \u0026\u0026 !(FlagInfiniteLength \u0026\u0026 len2==0 \u0026\u0026 tag2==0)){\n                        curPos += ifread(\u0026tag2,1,1,hdr);\n                        curPos += ifread(\u0026len2,1,1,hdr);\n                        if (VERBOSE_LEVEL==9)\n                            fprintf(stdout,\"MFER: tag=%3i chan=%2i len=%-4i tag2=%3i len2=%3i curPos=%i %li count=%4i\\n\",tag,chan,len,tag2,len2,curPos,iftell(hdr),(int)count);\n\n                        if (FlagInfiniteLength \u0026\u0026 len2==0 \u0026\u0026 tag2==0) break;\n\n                        count  += (2+len2);\n                        curPos += ifread(\u0026buf,1,len2,hdr);\n\nHere, the number of bytes read is not the Data Length decoded from the current frame in the file (`len`) but rather is a new length contained in a single octet read from the same input file (`len2`). Despite this, a stack-based buffer overflow condition can still occur, as the destination buffer is still `buf`, which has a size of only 128 bytes, while `len2` can be as large as 255.","status":"published","published":"2025-08-25T15:32:01Z","modified":"2025-11-03T21:35:28Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-121"],"updated_at":"2026-11-02T15:04:25.4654Z"}],"nvd":[{"id":"CVE-2025-54489","description":"A stack-based buffer overflow vulnerability exists in the MFER parsing functionality of The Biosig Project libbiosig 3.9.0 and Master Branch (35a819fa). A specially crafted MFER file can lead to arbitrary code execution. An attacker can provide a malicious file to trigger this vulnerability.This vulnerability manifests on line 8970 of biosig.c on the current master branch (35a819fa), when the Tag is 63:\r\n\r\n                else if (tag==63) {\r\n                    uint8_t tag2=255, len2=255;\r\n\r\n                    count = 0;\r\n                    while ((count\u003clen) \u0026\u0026 !(FlagInfiniteLength \u0026\u0026 len2==0 \u0026\u0026 tag2==0)){\r\n                        curPos += ifread(\u0026tag2,1,1,hdr);\r\n                        curPos += ifread(\u0026len2,1,1,hdr);\r\n                        if (VERBOSE_LEVEL==9)\r\n                            fprintf(stdout,\"MFER: tag=%3i chan=%2i len=%-4i tag2=%3i len2=%3i curPos=%i %li count=%4i\\n\",tag,chan,len,tag2,len2,curPos,iftell(hdr),(int)count);\r\n\r\n                        if (FlagInfiniteLength \u0026\u0026 len2==0 \u0026\u0026 tag2==0) break;\r\n\r\n                        count  += (2+len2);\r\n                        curPos += ifread(\u0026buf,1,len2,hdr);\r\n\r\nHere, the number of bytes read is not the Data Length decoded from the current frame in the file (`len`) but rather is a new length contained in a single octet read from the same input file (`len2`). Despite this, a stack-based buffer overflow condition can still occur, as the destination buffer is still `buf`, which has a size of only 128 bytes, while `len2` can be as large as 255.","status":"published","published":"2025-08-25T14:15:35.233Z","modified":"2026-06-17T09:40:11.827Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"secondary"}],"cwes":["CWE-121"],"updated_at":"2026-11-02T14:11:25.826804Z"}],"osv":[{"id":"CVE-2025-54489","description":"A stack-based buffer overflow vulnerability exists in the MFER parsing functionality of The Biosig Project libbiosig 3.9.0 and Master Branch (35a819fa). A specially crafted MFER file can lead to arbitrary code execution. An attacker can provide a malicious file to trigger this vulnerability.This vulnerability manifests on line 8970 of biosig.c on the current master branch (35a819fa), when the Tag is 63:\r\n\r\n                else if (tag==63) {\r\n                    uint8_t tag2=255, len2=255;\r\n\r\n                    count = 0;\r\n                    while ((count\u003clen) \u0026\u0026 !(FlagInfiniteLength \u0026\u0026 len2==0 \u0026\u0026 tag2==0)){\r\n                        curPos += ifread(\u0026tag2,1,1,hdr);\r\n                        curPos += ifread(\u0026len2,1,1,hdr);\r\n                        if (VERBOSE_LEVEL==9)\r\n                            fprintf(stdout,\"MFER: tag=%3i chan=%2i len=%-4i tag2=%3i len2=%3i curPos=%i %li count=%4i\\n\",tag,chan,len,tag2,len2,curPos,iftell(hdr),(int)count);\r\n\r\n                        if (FlagInfiniteLength \u0026\u0026 len2==0 \u0026\u0026 tag2==0) break;\r\n\r\n                        count  += (2+len2);\r\n                        curPos += ifread(\u0026buf,1,len2,hdr);\r\n\r\nHere, the number of bytes read is not the Data Length decoded from the current frame in the file (`len`) but rather is a new length contained in a single octet read from the same input file (`len2`). Despite this, a stack-based buffer overflow condition can still occur, as the destination buffer is still `buf`, which has a size of only 128 bytes, while `len2` can be as large as 255.","status":"published","published":"2025-08-25T14:15:35.233Z","modified":"2026-04-10T05:29:36.177154Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T15:44:50.863921Z"},{"id":"DEBIAN-CVE-2025-54489","description":"A stack-based buffer overflow vulnerability exists in the MFER parsing functionality of The Biosig Project libbiosig 3.9.0 and Master Branch (35a819fa). A specially crafted MFER file can lead to arbitrary code execution. An attacker can provide a malicious file to trigger this vulnerability.This vulnerability manifests on line 8970 of biosig.c on the current master branch (35a819fa), when the Tag is 63:\r \r                 else if (tag==63) {\r                     uint8_t tag2=255, len2=255;\r \r                     count = 0;\r                     while ((count\u003clen) \u0026\u0026 !(FlagInfiniteLength \u0026\u0026 len2==0 \u0026\u0026 tag2==0)){\r                         curPos += ifread(\u0026tag2,1,1,hdr);\r                         curPos += ifread(\u0026len2,1,1,hdr);\r                         if (VERBOSE_LEVEL==9)\r                             fprintf(stdout,\"MFER: tag=%3i chan=%2i len=%-4i tag2=%3i len2=%3i curPos=%i %li count=%4i\\n\",tag,chan,len,tag2,len2,curPos,iftell(hdr),(int)count);\r \r                         if (FlagInfiniteLength \u0026\u0026 len2==0 \u0026\u0026 tag2==0) break;\r \r                         count  += (2+len2);\r                         curPos += ifread(\u0026buf,1,len2,hdr);\r \r Here, the number of bytes read is not the Data Length decoded from the current frame in the file (`len`) but rather is a new length contained in a single octet read from the same input file (`len2`). Despite this, a stack-based buffer overflow condition can still occur, as the destination buffer is still `buf`, which has a size of only 128 bytes, while `len2` can be as large as 255.","status":"published","published":"2025-08-25T14:15:35.233Z","modified":"2026-09-01T20:05:54.561840731Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T15:45:47.378563Z"},{"id":"UBUNTU-CVE-2025-54489","description":"A stack-based buffer overflow vulnerability exists in the MFER parsing functionality of The Biosig Project libbiosig 3.9.0 and Master Branch (35a819fa). A specially crafted MFER file can lead to arbitrary code execution. An attacker can provide a malicious file to trigger this vulnerability.This vulnerability manifests on line 8970 of biosig.c on the current master branch (35a819fa), when the Tag is 63:                 else if (tag==63) {                     uint8_t tag2=255, len2=255;                     count = 0;                     while ((count\u003clen) \u0026\u0026 !(FlagInfiniteLength \u0026\u0026 len2==0 \u0026\u0026 tag2==0)){                         curPos += ifread(\u0026tag2,1,1,hdr);                         curPos += ifread(\u0026len2,1,1,hdr);                         if (VERBOSE_LEVEL==9)                             fprintf(stdout,\"MFER: tag=%3i chan=%2i len=%-4i tag2=%3i len2=%3i curPos=%i %li count=%4i\\n\",tag,chan,len,tag2,len2,curPos,iftell(hdr),(int)count);                         if (FlagInfiniteLength \u0026\u0026 len2==0 \u0026\u0026 tag2==0) break;                         count  += (2+len2);                         curPos += ifread(\u0026buf,1,len2,hdr); Here, the number of bytes read is not the Data Length decoded from the current frame in the file (`len`) but rather is a new length contained in a single octet read from the same input file (`len2`). Despite this, a stack-based buffer overflow condition can still occur, as the destination buffer is still `buf`, which has a size of only 128 bytes, while `len2` can be as large as 255.","status":"published","published":"2025-08-25T14:15:00Z","modified":"2026-10-17T12:57:08.635276937Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T16:55:50.817402Z"}]}}
