Vulnerabilities > CVE-2017-2920 - Improper Restriction of Operations within the Bounds of a Memory Buffer vulnerability in Pl32 Photoline 20.02

047910
CVSS 6.8 - MEDIUM
Attack vector
NETWORK
Attack complexity
MEDIUM
Privileges required
NONE
Confidentiality impact
PARTIAL
Integrity impact
PARTIAL
Availability impact
PARTIAL
network
pl32
CWE-119
nessus

Summary

An memory corruption vulnerability exists in the .SVG parsing functionality of Computerinsel Photoline 20.02. A specially crafted .SVG file can cause a vulnerability resulting in memory corruption, which can potentially lead to arbitrary code execution. An attacker can send a specific .SVG file to trigger this vulnerability.

Vulnerable Configurations

Part Description Count
Application
Pl32
1

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 familySuSE Local Security Checks
    NASL idSUSE_SU-2018-2064-1.NASL
    descriptionThis update for libofx fixes the following issues: Security issues fixed : - CVE-2017-2816: Fix an exploitable buffer overflow vulnerability in the tag parsing functionality (bsc#1058673). - CVE-2017-2920: Fix a buffer overflow vulnerability in sanitize_proprietary_tags in lib/ofx_preproc.cpp (bsc#1061964). - CVE-2017-14731: Fix remote denial of service via a crafted file in ofx_proc_file in ofx_preproc.cpp (bsc#1060437). Note that Tenable Network Security has extracted the preceding description block directly from the SUSE security advisory. Tenable has attempted to automatically clean and format it as much as possible without introducing additional issues.
    last seen2020-06-01
    modified2020-06-02
    plugin id111368
    published2018-07-27
    reporterThis script is Copyright (C) 2018-2019 and is owned by Tenable, Inc. or an Affiliate thereof.
    sourcehttps://www.tenable.com/plugins/nessus/111368
    titleSUSE SLED12 Security Update : libofx (SUSE-SU-2018:2064-1)
    code
    #
    # (C) Tenable Network Security, Inc.
    #
    # The descriptive text and package checks in this plugin were
    # extracted from SUSE update advisory SUSE-SU-2018:2064-1.
    # The text itself is copyright (C) SUSE.
    #
    
    include("compat.inc");
    
    if (description)
    {
      script_id(111368);
      script_version("1.4");
      script_cvs_date("Date: 2019/09/10 13:51:48");
    
      script_cve_id("CVE-2017-14731", "CVE-2017-2816", "CVE-2017-2920");
    
      script_name(english:"SUSE SLED12 Security Update : libofx (SUSE-SU-2018:2064-1)");
      script_summary(english:"Checks rpm output for the updated packages.");
    
      script_set_attribute(
        attribute:"synopsis", 
        value:"The remote SUSE host is missing one or more security updates."
      );
      script_set_attribute(
        attribute:"description", 
        value:
    "This update for libofx fixes the following issues: Security issues
    fixed :
    
      - CVE-2017-2816: Fix an exploitable buffer overflow
        vulnerability in the tag parsing functionality
        (bsc#1058673).
    
      - CVE-2017-2920: Fix a buffer overflow vulnerability in
        sanitize_proprietary_tags in lib/ofx_preproc.cpp
        (bsc#1061964).
    
      - CVE-2017-14731: Fix remote denial of service via a
        crafted file in ofx_proc_file in ofx_preproc.cpp
        (bsc#1060437).
    
    Note that Tenable Network Security has extracted the preceding
    description block directly from the SUSE security advisory. Tenable
    has attempted to automatically clean and format it as much as possible
    without introducing additional issues."
      );
      script_set_attribute(
        attribute:"see_also",
        value:"https://bugzilla.suse.com/show_bug.cgi?id=1058673"
      );
      script_set_attribute(
        attribute:"see_also",
        value:"https://bugzilla.suse.com/show_bug.cgi?id=1060437"
      );
      script_set_attribute(
        attribute:"see_also",
        value:"https://bugzilla.suse.com/show_bug.cgi?id=1061964"
      );
      script_set_attribute(
        attribute:"see_also",
        value:"https://www.suse.com/security/cve/CVE-2017-14731/"
      );
      script_set_attribute(
        attribute:"see_also",
        value:"https://www.suse.com/security/cve/CVE-2017-2816/"
      );
      script_set_attribute(
        attribute:"see_also",
        value:"https://www.suse.com/security/cve/CVE-2017-2920/"
      );
      # https://www.suse.com/support/update/announcement/2018/suse-su-20182064-1/
      script_set_attribute(
        attribute:"see_also",
        value:"http://www.nessus.org/u?302a626d"
      );
      script_set_attribute(
        attribute:"solution", 
        value:
    "To install this SUSE Security Update use the SUSE recommended
    installation methods like YaST online_update or 'zypper patch'.
    
    Alternatively you can run the command listed for your product :
    
    SUSE Linux Enterprise Workstation Extension 12-SP3:zypper in -t patch
    SUSE-SLE-WE-12-SP3-2018-1408=1
    
    SUSE Linux Enterprise Software Development Kit 12-SP3:zypper in -t
    patch SUSE-SLE-SDK-12-SP3-2018-1408=1
    
    SUSE Linux Enterprise Desktop 12-SP3:zypper in -t patch
    SUSE-SLE-DESKTOP-12-SP3-2018-1408=1"
      );
      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:POC/RL:U/RC:ND");
      script_set_cvss3_base_vector("CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H");
      script_set_cvss3_temporal_vector("CVSS:3.0/E:P/RL:U/RC:X");
    
      script_set_attribute(attribute:"plugin_type", value:"local");
      script_set_attribute(attribute:"cpe", value:"p-cpe:/a:novell:suse_linux:libofx");
      script_set_attribute(attribute:"cpe", value:"p-cpe:/a:novell:suse_linux:libofx-debuginfo");
      script_set_attribute(attribute:"cpe", value:"p-cpe:/a:novell:suse_linux:libofx-debugsource");
      script_set_attribute(attribute:"cpe", value:"p-cpe:/a:novell:suse_linux:libofx6");
      script_set_attribute(attribute:"cpe", value:"p-cpe:/a:novell:suse_linux:libofx6-debuginfo");
      script_set_attribute(attribute:"cpe", value:"cpe:/o:novell:suse_linux:12");
    
      script_set_attribute(attribute:"vuln_publication_date", value:"2017/09/13");
      script_set_attribute(attribute:"patch_publication_date", value:"2018/07/26");
      script_set_attribute(attribute:"plugin_publication_date", value:"2018/07/27");
      script_set_attribute(attribute:"generated_plugin", value:"current");
      script_end_attributes();
    
      script_category(ACT_GATHER_INFO);
      script_copyright(english:"This script is Copyright (C) 2018-2019 and is owned by Tenable, Inc. or an Affiliate thereof.");
      script_family(english:"SuSE Local Security Checks");
    
      script_dependencies("ssh_get_info.nasl");
      script_require_keys("Host/local_checks_enabled", "Host/cpu", "Host/SuSE/release", "Host/SuSE/rpm-list");
    
      exit(0);
    }
    
    
    include("audit.inc");
    include("global_settings.inc");
    include("rpm.inc");
    
    
    if (!get_kb_item("Host/local_checks_enabled")) audit(AUDIT_LOCAL_CHECKS_NOT_ENABLED);
    release = get_kb_item("Host/SuSE/release");
    if (isnull(release) || release !~ "^(SLED|SLES)") audit(AUDIT_OS_NOT, "SUSE");
    os_ver = pregmatch(pattern: "^(SLE(S|D)\d+)", string:release);
    if (isnull(os_ver)) audit(AUDIT_UNKNOWN_APP_VER, "SUSE");
    os_ver = os_ver[1];
    if (! preg(pattern:"^(SLED12)$", string:os_ver)) audit(AUDIT_OS_NOT, "SUSE SLED12", "SUSE " + os_ver);
    
    if (!get_kb_item("Host/SuSE/rpm-list")) audit(AUDIT_PACKAGE_LIST_MISSING);
    
    cpu = get_kb_item("Host/cpu");
    if (isnull(cpu)) audit(AUDIT_UNKNOWN_ARCH);
    if (cpu !~ "^i[3-6]86$" && "x86_64" >!< cpu && "s390x" >!< cpu) audit(AUDIT_LOCAL_CHECKS_NOT_IMPLEMENTED, "SUSE " + os_ver, cpu);
    if (cpu >!< "x86_64") audit(AUDIT_ARCH_NOT, "x86_64", cpu);
    
    
    sp = get_kb_item("Host/SuSE/patchlevel");
    if (isnull(sp)) sp = "0";
    if (os_ver == "SLED12" && (! preg(pattern:"^(3)$", string:sp))) audit(AUDIT_OS_NOT, "SLED12 SP3", os_ver + " SP" + sp);
    
    
    flag = 0;
    if (rpm_check(release:"SLED12", sp:"3", cpu:"x86_64", reference:"libofx-0.9.9-3.7.1")) flag++;
    if (rpm_check(release:"SLED12", sp:"3", cpu:"x86_64", reference:"libofx-debuginfo-0.9.9-3.7.1")) flag++;
    if (rpm_check(release:"SLED12", sp:"3", cpu:"x86_64", reference:"libofx-debugsource-0.9.9-3.7.1")) flag++;
    if (rpm_check(release:"SLED12", sp:"3", cpu:"x86_64", reference:"libofx6-0.9.9-3.7.1")) flag++;
    if (rpm_check(release:"SLED12", sp:"3", cpu:"x86_64", reference:"libofx6-debuginfo-0.9.9-3.7.1")) flag++;
    
    
    if (flag)
    {
      if (report_verbosity > 0) security_warning(port:0, extra:rpm_report_get());
      else security_warning(0);
      exit(0);
    }
    else
    {
      tested = pkg_tests_get();
      if (tested) audit(AUDIT_PACKAGE_NOT_AFFECTED, tested);
      else audit(AUDIT_PACKAGE_NOT_INSTALLED, "libofx");
    }
    
  • NASL familySuSE Local Security Checks
    NASL idOPENSUSE-2018-820.NASL
    descriptionThis update for libofx fixes the following issues : The following security vulnerabilities have been addressed : - CVE-2017-2920: Fixed an exploitable buffer overflow in the tag parsing functionality, which could result in an out of bounds write and could be triggered via a specially crafted OFX file (boo#1061964) - CVE-2017-2816: Fixed another buffer overflow in the tag parsing functionality, which could result in an stack overflow and could be triggered via a specially crafted OFX file (boo#1058673)
    last seen2020-06-05
    modified2018-08-08
    plugin id111585
    published2018-08-08
    reporterThis script is Copyright (C) 2018-2020 and is owned by Tenable, Inc. or an Affiliate thereof.
    sourcehttps://www.tenable.com/plugins/nessus/111585
    titleopenSUSE Security Update : libofx (openSUSE-2018-820)
  • NASL familyGentoo Local Security Checks
    NASL idGENTOO_GLSA-201908-26.NASL
    descriptionThe remote host is affected by the vulnerability described in GLSA-201908-26 (libofx: Multiple vulnerabilities) Multiple vulnerabilities have been discovered in libofx. Please review the CVE identifiers referenced below for details. Impact : A remote attacker could entice a user to process a specially crafted file using an application linked against libofx, possibly resulting in execution of arbitrary code with the privileges of the process or a Denial of Service condition. Workaround : There is no known workaround at this time.
    last seen2020-06-01
    modified2020-06-02
    plugin id128441
    published2019-09-03
    reporterThis script is Copyright (C) 2019 and is owned by Tenable, Inc. or an Affiliate thereof.
    sourcehttps://www.tenable.com/plugins/nessus/128441
    titleGLSA-201908-26 : libofx: Multiple vulnerabilities

Seebug

bulletinFamilyexploit
description### Summary An memory corruption vulnerability exists in the .SVG parsing functionality of Computerinsel Photoline 20.02. A specially crafted .SVG file can cause a vulnerability resulting in memory corruption, which can potentially lead to arbitrary code execution. An attacker can send a specific .SVG file to trigger this vulnerability. ### Tested Versions Computerinsel Photoline 20.02 ### Product URLs https://www.pl32.com/ ### CVSSv3 Score 8.8 - CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H ### CWE CWE-787: Out-of-bounds Write ### Details The code responsible for the vulnerability is provided below: ``` .text:00CA765C fld [esp+274h+var_25C_ARG_KONWERS] ; arg .text:00CA7660 mov [esp+274h+var_234], eax .text:00CA7664 call __ftol2_sse ; float -> int .text:00CA7669 mov [esp+274h+var_230], eax ; out val ``` Memset execution: ``` .text:00822E0B mov eax, [ebp+arg_0_doMEMSET_SIZE_PTR] .text:00822E0E imul edx, [eax+4] ; [eax+4] from __ftol2_sse .text:00822E12 push edx ; size_t .text:00822E13 push ebx ; int .text:00822E14 push edi ; void * .text:00822E15 call _memset ; bug svg ``` Memset function is executed with a size parameter that can be controlled by attacker. The size parameter is calculated from the SVG Path's D attribute which is a string containing a series of path descriptions (in this case Curveto). This value is later converted from float to int and then later used for multiplication purposes (instruction at 0x00822E0E). In this case the bug requires the feGaussianBlur filter to be attached to the path style. ### Crash Information ``` 0:000> !analyze -v ******************************************************************************* * * * Exception Analysis * * * ******************************************************************************* Failed calling InternetOpenUrl, GLE=12029 FAULTING_IP: image00400000+b44cbf 00f44cbf f3ab rep stos dword ptr es:[edi] EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff) ExceptionAddress: 00f44cbf (image00400000+0x00b44cbf) ExceptionCode: c0000005 (Access violation) ExceptionFlags: 00000000 NumberParameters: 2 Parameter[0]: 00000001 Parameter[1]: 0ac36000 Attempt to write to address 0ac36000 FAULTING_THREAD: 0004afe0 PROCESS_NAME: image00400000 ERROR_CODE: (NTSTATUS) 0xc0000005 - Instrukcja spod 0x%08lx odwo EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - Instrukcja spod 0x%08lx odwo EXCEPTION_PARAMETER1: 00000001 EXCEPTION_PARAMETER2: 0ac36000 WRITE_ADDRESS: 0ac36000 FOLLOWUP_IP: image00400000+b44cbf 00f44cbf f3ab rep stos dword ptr es:[edi] EXCEPTION_DOESNOT_MATCH_CODE: This indicates a hardware error. Instruction at 00f44cbf does not read/write to 0ac36000 DETOURED_IMAGE: 1 MOD_LIST: <ANALYSIS/> NTGLOBALFLAG: 470 APPLICATION_VERIFIER_FLAGS: 0 BUGCHECK_STR: APPLICATION_FAULT_STRING_DEREFERENCE_CODE_ADDRESS_MISMATCH_INVALID_POINTER_WRITE_FILL_PATTERN_ffffffff PRIMARY_PROBLEM_CLASS: STRING_DEREFERENCE_FILL_PATTERN_ffffffff DEFAULT_BUCKET_ID: STRING_DEREFERENCE_FILL_PATTERN_ffffffff LAST_CONTROL_TRANSFER: from 0082305c to 00f44cbf STACK_TEXT: WARNING: Stack unwind information not available. Following frames may be wrong. 0018e0c8 0082305c 050fbcb8 05d50020 7bfe3820 image00400000+0xb44cbf 0018e150 00825ca1 00000000 0018e250 00000003 image00400000+0x42305c 00000000 00000000 00000000 00000000 00000000 image00400000+0x425ca1 SYMBOL_STACK_INDEX: 0 SYMBOL_NAME: image00400000+b44cbf FOLLOWUP_NAME: MachineOwner MODULE_NAME: image00400000 DEBUG_FLR_IMAGE_TIMESTAMP: 589ee44a STACK_COMMAND: ~0s ; kb FAILURE_BUCKET_ID: STRING_DEREFERENCE_FILL_PATTERN_ffffffff_c0000005_E:_shitty_programs_photoline_PhotoLine.exe!Unknown BUCKET_ID: APPLICATION_FAULT_STRING_DEREFERENCE_CODE_ADDRESS_MISMATCH_INVALID_POINTER_WRITE_FILL_PATTERN_ffffffff_DETOURED _image004 00000+b44cbf WATSON_STAGEONE_URL: http://watson.microsoft.com/StageOne/image00400000/20_0_0_2/589ee44a/image00400000/20_0_0_2/589ee44a/c0000005/00b44cbf.htm? Retriage=1 0:000> .exr 0xffffffffffffffff ExceptionAddress: 00f44cbf (image00400000+0x00b44cbf) ExceptionCode: c0000005 (Access violation) ExceptionFlags: 00000000 NumberParameters: 2 Parameter[0]: 00000001 Parameter[1]: 0ac36000 Attempt to write to address 0ac36000 0:000> r eax=ffffffff ebx=000000ff ecx=1c4eb608 edx=00000000 esi=050fbcb0 edi=0ac36000 eip=00f44cbf esp=0018e06c ebp=0018e0c8 iopl=0 nv up ei pl nz na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010206 image00400000+0xb44cbf: 00f44cbf f3ab rep stos dword ptr es:[edi] ``` ### Timeline * 2017-08-30 - Vendor Disclosure * 2017-10-04 - Public Release
idSSV:96633
last seen2017-11-19
modified2017-10-10
published2017-10-10
reporterRoot
titleComputerinsel Photoline SVG Parsing Code Execution Vulnerability(CVE-2017-2920)

Talos

idTALOS-2017-0427
last seen2019-05-29
published2017-10-04
reporterTalos Intelligence
sourcehttp://www.talosintelligence.com/vulnerability_reports/TALOS-2017-0427
titleComputerinsel Photoline SVG Parsing Code Execution Vulnerability