Vulnerabilities > CVE-2016-0301 - Improper Restriction of Operations within the Bounds of a Memory Buffer vulnerability in IBM Domino
Attack vector
NETWORK Attack complexity
MEDIUM Privileges required
NONE Confidentiality impact
PARTIAL Integrity impact
PARTIAL Availability impact
PARTIAL Summary
Heap-based buffer overflow in the KeyView PDF filter in IBM Domino 8.5.x before 8.5.3 FP6 IF13 and 9.x before 9.0.1 FP6 allows remote attackers to execute arbitrary code via a crafted PDF document, a different vulnerability than CVE-2016-0277, CVE-2016-0278, and CVE-2016-0279.
Vulnerable Configurations
Common Weakness Enumeration (CWE)
Common Attack Pattern Enumeration and Classification (CAPEC)
- Buffer Overflow via Environment Variables This attack pattern involves causing a buffer overflow through manipulation of environment variables. Once the attacker finds that they can modify an environment variable, they may try to overflow associated buffers. This attack leverages implicit trust often placed in environment variables.
- Overflow Buffers Buffer Overflow attacks target improper or missing bounds checking on buffer operations, typically triggered by input injected by an attacker. As a consequence, an attacker is able to write past the boundaries of allocated buffer regions in memory, causing a program crash or potentially redirection of execution as per the attackers' choice.
- Client-side Injection-induced Buffer Overflow This type of attack exploits a buffer overflow vulnerability in targeted client software through injection of malicious content from a custom-built hostile service.
- Filter Failure through Buffer Overflow In this attack, the idea is to cause an active filter to fail by causing an oversized transaction. An attacker may try to feed overly long input strings to the program in an attempt to overwhelm the filter (by causing a buffer overflow) and hoping that the filter does not fail securely (i.e. the user input is let into the system unfiltered).
- MIME Conversion An attacker exploits a weakness in the MIME conversion routine to cause a buffer overflow and gain control over the mail server machine. The MIME system is designed to allow various different information formats to be interpreted and sent via e-mail. Attack points exist when data are converted to MIME compatible format and back.
Nessus
NASL family Misc. NASL id DOMINO_9_0_1_FP6.NASL description According to its banner, the version of IBM Domino (formerly IBM Lotus Domino) running on the remote host is 9.0.x prior to 9.0.1 Fix Pack 6 (FP6). It is, therefore, affected by the following vulnerabilities : - Multiple heap-based buffer overflow conditions exist in the KeyView PDF filter when parsing a PDF document due to improper validation of user-supplied input. An unauthenticated, remote attacker can exploit these, by convincing a user to open a specially crafted PDF document, to cause a denial of service condition or the execution of arbitrary code. (CVE-2016-0277, CVE-2016-0278, CVE-2016-0279, CVE-2016-0301) - A security restriction bypass vulnerability exists in the remote console due to an error that occurs when an unspecified unsupported configuration is used involving UNC share path names. An unauthenticated, remote attacker can exploit this to bypass authentication and possibly execute arbitrary code with SYSTEM privileges. (CVE-2016-0304) last seen 2020-06-01 modified 2020-06-02 plugin id 92787 published 2016-08-08 reporter This script is Copyright (C) 2016-2019 and is owned by Tenable, Inc. or an Affiliate thereof. source https://www.tenable.com/plugins/nessus/92787 title IBM Domino 9.0.x < 9.0.1 Fix Pack 6 Multiple Vulnerabilities code # # (C) Tenable Network Security, Inc. # include("compat.inc"); if (description) { script_id(92787); script_version("1.6"); script_cvs_date("Date: 2019/11/14"); script_cve_id( "CVE-2016-0277", "CVE-2016-0278", "CVE-2016-0279", "CVE-2016-0301", "CVE-2016-0304" ); script_bugtraq_id( 90804, 91098, 91099, 91142, 91149 ); script_name(english:"IBM Domino 9.0.x < 9.0.1 Fix Pack 6 Multiple Vulnerabilities"); script_summary(english:"Checks the version of IBM Domino."); script_set_attribute(attribute:"synopsis", value: "A business collaboration application running on the remote host is affected by multiple vulnerabilities."); script_set_attribute(attribute:"description", value: "According to its banner, the version of IBM Domino (formerly IBM Lotus Domino) running on the remote host is 9.0.x prior to 9.0.1 Fix Pack 6 (FP6). It is, therefore, affected by the following vulnerabilities : - Multiple heap-based buffer overflow conditions exist in the KeyView PDF filter when parsing a PDF document due to improper validation of user-supplied input. An unauthenticated, remote attacker can exploit these, by convincing a user to open a specially crafted PDF document, to cause a denial of service condition or the execution of arbitrary code. (CVE-2016-0277, CVE-2016-0278, CVE-2016-0279, CVE-2016-0301) - A security restriction bypass vulnerability exists in the remote console due to an error that occurs when an unspecified unsupported configuration is used involving UNC share path names. An unauthenticated, remote attacker can exploit this to bypass authentication and possibly execute arbitrary code with SYSTEM privileges. (CVE-2016-0304)"); script_set_attribute(attribute:"see_also", value:"https://www-01.ibm.com/support/docview.wss?uid=swg21983292"); script_set_attribute(attribute:"see_also", value:"https://www-01.ibm.com/support/docview.wss?uid=swg21983328"); script_set_attribute(attribute:"solution", value: "Upgrade to IBM Domino version 9.0.1 FP6 or later."); script_set_cvss_base_vector("CVSS2#AV:N/AC:M/Au:N/C:P/I:P/A:P"); script_set_cvss_temporal_vector("CVSS2#E:U/RL:OF/RC:C"); script_set_cvss3_base_vector("CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H"); script_set_cvss3_temporal_vector("CVSS:3.0/E:U/RL:O/RC:C"); script_set_attribute(attribute:"cvss_score_source", value:"CVE-2016-0304"); script_set_attribute(attribute:"exploitability_ease", value:"No known exploits are available"); script_set_attribute(attribute:"exploit_available", value:"false"); script_set_attribute(attribute:"vuln_publication_date", value:"2016/06/07"); script_set_attribute(attribute:"patch_publication_date", value:"2016/06/07"); script_set_attribute(attribute:"plugin_publication_date", value:"2016/08/08"); script_set_attribute(attribute:"potential_vulnerability", value:"true"); script_set_attribute(attribute:"plugin_type", value:"remote"); script_set_attribute(attribute:"cpe", value:"cpe:/a:ibm:domino"); script_set_attribute(attribute:"cpe", value:"cpe:/a:ibm:lotus_domino"); script_end_attributes(); script_category(ACT_GATHER_INFO); script_family(english:"Misc."); script_copyright(english:"This script is Copyright (C) 2016-2019 and is owned by Tenable, Inc. or an Affiliate thereof."); script_dependencies("domino_installed.nasl"); script_require_keys("Domino/Version", "Settings/ParanoidReport"); exit(0); } include("audit.inc"); include("global_settings.inc"); include("misc_func.inc"); # Check the version of Domino installed. app_name = "IBM Domino"; ver = get_kb_item_or_exit("Domino/Version"); port = get_kb_item("Domino/Version_provided_by_port"); if (!port) port = 0; version = NULL; fix = NULL; fix_ver = NULL; fix_pack = NULL; hotfix = NULL; # Do not have data on special fixes if (report_paranoia < 2) audit(AUDIT_PARANOID); # Ensure sufficient granularity. if (ver !~ "^(\d+\.){1,}\d+.*$") audit(AUDIT_VER_NOT_GRANULAR, app_name, port, ver); # Only check for 9.0.0.x and 9.0.1.x if (ver =~ "^9\.0\.[0-1]($|[^0-9])") { fix = "9.0.1 FP6"; fix_ver = "9.0.1"; fix_pack = 6; } else audit(AUDIT_LISTEN_NOT_VULN, app_name, port, ver); # Breakdown the version into components. version = eregmatch(string:ver, pattern:"^((?:\d+\.){1,}\d+)(?: FP(\d+))?$"); if (isnull(version)) audit(AUDIT_UNKNOWN_APP_VER, app_name); # Use 0 if no FP number. Version number itself was # checked for in the granularity check. if (!version[2]) version[2] = 0; else version[2] = int(version[2]); # Compare current to fix and report as needed. if ( ver_compare(ver:version[1], fix:fix_ver, strict:FALSE) < 1 && version[2] < fix_pack ) { security_report_v4( port:port, severity:SECURITY_WARNING, extra: '\n' + '\n Installed version : ' + ver + '\n Fixed version : ' + fix + '\n' ); } else audit(AUDIT_LISTEN_NOT_VULN, app_name, port, ver);
NASL family Misc. NASL id DOMINO_8_5_3FP6_IF13.NASL description According to its banner, the version of IBM Domino (formerly IBM Lotus Domino) running on the remote host is 8.5.x prior to 8.5.3 Fix Pack 6 (FP6) Interim Fix 13 (IF13). It is, therefore, affected by the following vulnerabilities : - Multiple heap-based buffer overflow conditions exist in the KeyView PDF filter when parsing a PDF document due to improper validation of user-supplied input. An unauthenticated, remote attacker can exploit these, by convincing a user to open a specially crafted PDF document, to cause a denial of service condition or the execution of arbitrary code. (CVE-2016-0277, CVE-2016-0278, CVE-2016-0279, CVE-2016-0301) - A security restriction bypass vulnerability exists in the remote console due to an error that occurs when an unspecified unsupported configuration is used involving UNC share path names. An unauthenticated, remote attacker can exploit this to bypass authentication and possibly execute arbitrary code with SYSTEM privileges. (CVE-2016-0304) last seen 2020-06-01 modified 2020-06-02 plugin id 92786 published 2016-08-08 reporter This script is Copyright (C) 2016-2019 and is owned by Tenable, Inc. or an Affiliate thereof. source https://www.tenable.com/plugins/nessus/92786 title IBM Domino 8.5.x < 8.5.3 Fix Pack 6 Interim Fix 13 Multiple Vulnerabilities code # # (C) Tenable Network Security, Inc. # include("compat.inc"); if (description) { script_id(92786); script_version("1.6"); script_cvs_date("Date: 2019/11/14"); script_cve_id( "CVE-2016-0277", "CVE-2016-0278", "CVE-2016-0279", "CVE-2016-0301", "CVE-2016-0304" ); script_bugtraq_id( 90804, 91098, 91099, 91142, 91149 ); script_name(english:"IBM Domino 8.5.x < 8.5.3 Fix Pack 6 Interim Fix 13 Multiple Vulnerabilities"); script_summary(english:"Checks the version of IBM Domino."); script_set_attribute(attribute:"synopsis", value: "A business collaboration application running on the remote host is affected by multiple vulnerabilities."); script_set_attribute(attribute:"description", value: "According to its banner, the version of IBM Domino (formerly IBM Lotus Domino) running on the remote host is 8.5.x prior to 8.5.3 Fix Pack 6 (FP6) Interim Fix 13 (IF13). It is, therefore, affected by the following vulnerabilities : - Multiple heap-based buffer overflow conditions exist in the KeyView PDF filter when parsing a PDF document due to improper validation of user-supplied input. An unauthenticated, remote attacker can exploit these, by convincing a user to open a specially crafted PDF document, to cause a denial of service condition or the execution of arbitrary code. (CVE-2016-0277, CVE-2016-0278, CVE-2016-0279, CVE-2016-0301) - A security restriction bypass vulnerability exists in the remote console due to an error that occurs when an unspecified unsupported configuration is used involving UNC share path names. An unauthenticated, remote attacker can exploit this to bypass authentication and possibly execute arbitrary code with SYSTEM privileges. (CVE-2016-0304)"); script_set_attribute(attribute:"see_also", value:"https://www-01.ibm.com/support/docview.wss?uid=swg21983292"); script_set_attribute(attribute:"see_also", value:"https://www-01.ibm.com/support/docview.wss?uid=swg21983328"); script_set_attribute(attribute:"solution", value: "Upgrade to IBM Domino version 8.5.3 FP6 IF13 or later."); script_set_cvss_base_vector("CVSS2#AV:N/AC:M/Au:N/C:P/I:P/A:P"); script_set_cvss_temporal_vector("CVSS2#E:U/RL:OF/RC:C"); script_set_cvss3_base_vector("CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H"); script_set_cvss3_temporal_vector("CVSS:3.0/E:U/RL:O/RC:C"); script_set_attribute(attribute:"cvss_score_source", value:"CVE-2016-0304"); script_set_attribute(attribute:"exploitability_ease", value:"No known exploits are available"); script_set_attribute(attribute:"exploit_available", value:"false"); script_set_attribute(attribute:"vuln_publication_date", value:"2016/06/07"); script_set_attribute(attribute:"patch_publication_date", value:"2016/06/07"); script_set_attribute(attribute:"plugin_publication_date", value:"2016/08/08"); script_set_attribute(attribute:"potential_vulnerability", value:"true"); script_set_attribute(attribute:"plugin_type", value:"remote"); script_set_attribute(attribute:"cpe", value:"cpe:/a:ibm:domino"); script_set_attribute(attribute:"cpe", value:"cpe:/a:ibm:lotus_domino"); script_end_attributes(); script_category(ACT_GATHER_INFO); script_family(english:"Misc."); script_copyright(english:"This script is Copyright (C) 2016-2019 and is owned by Tenable, Inc. or an Affiliate thereof."); script_dependencies("domino_installed.nasl"); script_require_keys("Domino/Version", "Settings/ParanoidReport"); exit(0); } include("audit.inc"); include("global_settings.inc"); include("misc_func.inc"); app_name = "IBM Domino"; ver = get_kb_item_or_exit("Domino/Version"); port = get_kb_item("Domino/Version_provided_by_port"); if (!port) port = 0; version = NULL; fix = NULL; fix_ver = NULL; fix_pack = NULL; hotfix = NULL; # Do not have data on special fixes if (report_paranoia < 2) audit(AUDIT_PARANOID); # Ensure sufficient granularity if (ver !~ "^(\d+\.){1,}\d+.*$") audit(AUDIT_VER_NOT_GRANULAR, app_name, port, ver); # Only check for 8.5.0.x through 8.5.3.x versions if (ver =~ "^8\.5\.[0-3]($|[^0-9])") { fix = "8.5.3 FP6 IF13"; fix_ver = "8.5.3"; fix_pack = 6; hotfix = 2698; } else audit(AUDIT_LISTEN_NOT_VULN, app_name, port, ver); # Breakdown the version into components. version = eregmatch(string:ver, pattern:"^((?:\d+\.){1,}\d+)(?: FP(\d+))?(?: HF(\d+))?$"); if (isnull(version)) audit(AUDIT_UNKNOWN_APP_VER, app_name); # Use 0 as a placeholder if no FP or HF. Version number itself was # checked for in the granularity check. if (!version[2]) version[2] = 0; else version[2] = int(version[2]); if (!version[3]) version[3] = 0; else version[3] = int(version[3]); # Compare current to fix and report as needed. if ( ver_compare(ver:version[1], fix:fix_ver, strict:FALSE) == -1 || (ver_compare(ver:version[1], fix:fix_ver, strict:FALSE) == 0 && version[2] < fix_pack) || (ver_compare(ver:version[1], fix:fix_ver, strict:FALSE) == 0 && version[2] == fix_pack && version[3] < hotfix) ) { security_report_v4( port:port, severity:SECURITY_WARNING, extra: '\n' + '\n Installed version : ' + ver + '\n Fixed version : ' + fix + '\n' ); } else audit(AUDIT_LISTEN_NOT_VULN, app_name, port, ver);
Seebug
bulletinFamily | exploit |
description | ### SUMMARY A heap based buffer overflow vulnerability present in KeyView PDF filter as used by Domino can lead to remote arbitrary code execution. ### TESTED VERSIONS KeyView 10.16 as used by IBM Domino 9.0.1 ### PRODUCT URLs http://www-03.ibm.com/software/products/en/ibmdomino ### DETAILS While parsing an ID description of a PDF trailer, no checks are being made regarding its length. The ID, which is usually an ASCII representation of hexadecimal value, is converted into it's byte array equivalent without size checks leading to a straight forward heap overflow which can be abused to overwrite sensitive data structures or heap metadata and subvert the process execution flow to arbitrary code execution. Shortened test case triggering the vulnerability can be summarized as follows: ``` %PDF-1.3 %âãÏÓ trailer << /Root 4 0 R /ID[<AAAAAAAAAAAAA...(a large number of hex characters)...41414141 >> startxref 4139 %%EOF ``` When initializing the parser, a large chunk of memory is allocated in `PDFAllocateContext` function of `pdfsr.so` library (132648 bytes in size to be precise). An offset into this large context memory chunk is used as a start of the buffer that ends up being overflown. The overflow happens in the following code: ``` .text:B79DC7DA loc_B79DC7DA: .text:B79DC7DA mov [ebp+var_15], al [1] .text:B79DC7DD lea eax, [edx+1] [2] .text:B79DC7E0 mov [ebp+var_F0], eax [3] .text:B79DC7E6 movzx eax, byte ptr [edx+1] .text:B79DC7EA mov [ebp+var_14], al [4] .text:B79DC7ED lea eax, [edx+2] .text:B79DC7F0 mov [ebp+var_F0], eax .text:B79DC7F6 mov [ebp+var_13], 0 .text:B79DC7FA mov dword ptr [esp+0Ch], 0 ; group .text:B79DC802 mov dword ptr [esp+8], 10h ; base .text:B79DC80A mov dword ptr [esp+4], 0 ; endptr .text:B79DC812 lea eax, [ebp+var_15] .text:B79DC815 mov [esp], eax ; nptr .text:B79DC818 call ___strtol_internal [5] .text:B79DC81D mov edx, [ebp+counter] .text:B79DC823 mov [edx+edi+11D8h], al [6] .text:B79DC82A mov edx, [ebp+var_F0] .text:B79DC830 cmp esi, edx [7] .text:B79DC832 jbe loc_B79DCB16 .text:B79DC838 add [ebp+counter], 1 .text:B79DC83F movzx eax, byte ptr [edx] .text:B79DC842 cmp al, '>' [8] .text:B79DC844 jnz short loc_B79 ``` At the beginning of the above code, at [1], `al` contains the first character of the ID hex string which is saved in `var_15`, at [2],[3] and [4] the second character is saved in `var_14` which, along with var_15, makes up a string that is passed to `strtol` at [5]. Function `strtol` is called with base set to 0x10, converting from hex string into bytes. At [6] the returned value is written to the buffer. This is where the out of bounds write occurs when the counters are past the boundary of the buffer. At [7] the current string counter is checked against the file end, `esi` points to the end of file. If the check at [7] passes, another check is made at [8] which is looking for a terminating `>` character. No buffer length checks are being made. This buffer overflow can be abused to overwrite other parts of the context structure or even, further up the heap, the heap metadata thus leading to process crash and possible arbitrary code execution. The supplied test case is crafted in such way that the buffer overflow will overwrite a pointer on the heap which is later dereferenced during heap cleanup. The process crashes while calling free on an invalid pointer. Further control over data overwritten in the context structure can lead to arbitrary code execution. Detection of PDF files specifically crafted to trigger this vulnerability can be based on the abnormally large length of the ID value in the PDF trailer. The vulnerability can be triggered with the supplied test case in the `filter` standalone KeyView binary shipped with IBM Domino, or by sending it as an attachment with an email to a Domino mail server. ### TIMELINE * 2016-02-09 - Vendor Notification * 2016-06-08 – Public Disclosure |
id | SSV:96764 |
last seen | 2017-11-19 |
modified | 2017-10-20 |
published | 2017-10-20 |
reporter | Root |
title | IBM Domino KeyView PDF Filter Trailer ID Code Execution Vulnerability(CVE-2016-0301) |
Talos
id | TALOS-2016-0092 |
last seen | 2019-05-29 |
published | 2016-06-08 |
reporter | Talos Intelligence |
source | http://www.talosintelligence.com/vulnerability_reports/TALOS-2016-0092 |
title | IBM Domino KeyView PDF Filter Trailer ID Code Execution Vulnerability |