|
Message-ID: <b20ad75f-a368-b528-f471-aa3065483581@gmail.com> Date: Wed, 14 Jun 2023 18:53:40 +0200 From: Till Kamppeter <till.kamppeter@...il.com> To: oss-security@...ts.openwall.com Subject: CVE-2023-34095: cpdb-libs: Buffer overflows via scanf Following bug got reported to OpenPrinting's GitHub, repo cpdb-libs, as a private (security) issue report, which is now published: https://github.com/OpenPrinting/cpdb-libs/security/advisories/GHSA-25j7-9gfc-f46x Summary There's multiple instances of buffer overflows in this package via improper use of scanf(3). Details cpdb-libs/tools/cpdb-text-frontend.c Line 362 in 85555fb else if (strcmp(buf, "print-file") == 0) char printer_id[BUFSIZE], backend_name[BUFSIZE], file_path[BUFSIZE]; scanf("%s%s%s", file_path, printer_id, backend_name); cpdb-libs/tools/cpdb-text-frontend.c Line 453 in 85555fb else if (strcmp(buf, "get-all-translations") == 0) char printer_id[BUFSIZE]; char backend_name[BUFSIZE]; scanf("%s%s", printer_id, backend_name); cpdb-libs/cpdb/cpdb-frontend.c Line 372 in 85555fb PrintBackend *cpdbCreateBackendFromFile(GDBusConnection *connection, char obj_path[CPDB_BSIZE]; /* ... */ if ((file = fopen(path, "r")) == NULL) /* ... */ if (fscanf(file, "%s", obj_path) == 0) %s does not place bounds on the allowed input sizes. All scanf() or fscanf() calls in the cpdb-libs package which take strings via %s format conversion directive read these strings into buffers of 1024 characters of length (BUFSIZE). So one can easily replace all occurences of %s by %1023s (accept a maximum of 1023 characters to leave space for terminating zero byte) in all lines containing scanf or fscanf, easily automated by running four times the command perl -p -i -e 's/(scanf\(.*?".*?)%s/\1%1023s/' cpdb/cpdb-frontend.c tools/cpdb-text-frontend.c and checking with grep scanf */*.c Quick test/reproducer: Run cpdb-text-frontend and enter a command line (no valid command required, only arbitrary characters) of more than 1024 characters. without the fix you will get a segfault, with the fix no segfault and the overlength of the input gets truncated. To test the fix in the libraries (not in cpdb-text-backend) you would need to create a file named /tmp/org.openprinting.Backend.CUPS with its first line having more than 1024 characters. Then run CPDB_DEBUG_LOGFILE=log.txt CPDB_DEBUG_LEVEL=debug CPDB_BACKEND_INFO_DIR=/tmp cpdb-text-frontend With the original libcpdb-frontend.so.2.0.0 you will get a segmentation fault, with the fix you will reach the command prompt of the text frontend (but without printer list). The report got assigned CVE-2023-34095 The fix is committed to the GIT repository of cpdb-libs: https://github.com/OpenPrinting/cpdb-libs/commit/f181bd1f1 Package maintainers/security teams of the operating system distributions, please apply the fix by then. The fix will be included in the upcoming releases. Till
Powered by blists - more mailing lists
Please check out the Open Source Software Security Wiki, which is counterpart to this mailing list.
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.