Package: release.debian.org
Severity: normal
Tags: bookworm
User: release.debian....@packages.debian.org
Usertags: pu


The attached debdiff for cpdb-libs fixes CVE-2023-34095 Bookworm. This CVE has been marked as no-dsa by the security team.

The fix just restricts the usable buffer and should have no side effects.

  Thorsten
diff -Nru cpdb-libs-1.2.0/debian/changelog cpdb-libs-1.2.0/debian/changelog
--- cpdb-libs-1.2.0/debian/changelog    2023-01-12 22:03:02.000000000 +0100
+++ cpdb-libs-1.2.0/debian/changelog    2023-06-27 22:03:02.000000000 +0200
@@ -1,3 +1,10 @@
+cpdb-libs (1.2.0-2+deb12u1) bookworm; urgency=medium
+
+  * CVE-2023-34095 (Closes: #1038253)
+    buffer overflow via improper use of scanf()/fscanf()
+
+ -- Thorsten Alteholz <deb...@alteholz.de>  Tue, 27 Jun 2023 22:03:02 +0200
+
 cpdb-libs (1.2.0-2) unstable; urgency=medium
 
   * source upload
diff -Nru cpdb-libs-1.2.0/debian/patches/CVE-2023-34095.patch 
cpdb-libs-1.2.0/debian/patches/CVE-2023-34095.patch
--- cpdb-libs-1.2.0/debian/patches/CVE-2023-34095.patch 1970-01-01 
01:00:00.000000000 +0100
+++ cpdb-libs-1.2.0/debian/patches/CVE-2023-34095.patch 2023-06-27 
22:03:02.000000000 +0200
@@ -0,0 +1,161 @@
+Description: backported fix for CVE-2023-34095
+Index: cpdb-libs/demo/print_frontend.c
+===================================================================
+--- cpdb-libs.orig/demo/print_frontend.c       2023-06-28 06:57:31.699739106 
+0200
++++ cpdb-libs/demo/print_frontend.c    2023-06-28 08:01:19.416613086 +0200
+@@ -48,7 +48,7 @@
+     {
+         printf("> ");
+         fflush(stdout);
+-        scanf("%s", buf);
++        scanf("%99s", buf);
+         if (strcmp(buf, "stop") == 0)
+         {
+             disconnect_from_dbus(f);
+@@ -84,7 +84,7 @@
+         {
+             char printer_id[100];
+             char backend_name[100];
+-            scanf("%s%s", printer_id, backend_name);
++            scanf("%99s%99s", printer_id, backend_name);
+             g_message("Getting all attributes ..\n");
+             PrinterObj *p = find_PrinterObj(f, printer_id, backend_name);
+ 
+@@ -106,7 +106,7 @@
+         else if (strcmp(buf, "get-default") == 0)
+         {
+             char printer_id[100], backend_name[100], option_name[100];
+-            scanf("%s%s%s", option_name, printer_id, backend_name);
++            scanf("%99s%99s%99s", option_name, printer_id, backend_name);
+             PrinterObj *p = find_PrinterObj(f, printer_id, backend_name);
+             char *ans = get_default(p, option_name);
+             if (!ans)
+@@ -117,7 +117,7 @@
+         else if (strcmp(buf, "get-setting") == 0)
+         {
+             char printer_id[100], backend_name[100], setting_name[100];
+-            scanf("%s%s%s", setting_name, printer_id, backend_name);
++            scanf("%99s%99s%99s", setting_name, printer_id, backend_name);
+             PrinterObj *p = find_PrinterObj(f, printer_id, backend_name);
+             char *ans = get_setting(p, setting_name);
+             if (!ans)
+@@ -128,7 +128,7 @@
+         else if (strcmp(buf, "get-current") == 0)
+         {
+             char printer_id[100], backend_name[100], option_name[100];
+-            scanf("%s%s%s", option_name, printer_id, backend_name);
++            scanf("%99s%99s%99s", option_name, printer_id, backend_name);
+             PrinterObj *p = find_PrinterObj(f, printer_id, backend_name);
+             char *ans = get_current(p, option_name);
+             if (!ans)
+@@ -139,7 +139,7 @@
+         else if (strcmp(buf, "add-setting") == 0)
+         {
+             char printer_id[100], backend_name[100], option_name[100], 
option_val[100];
+-            scanf("%s %s %s %s", option_name, option_val, printer_id, 
backend_name);
++            scanf("%99s %99s %99s %99s", option_name, option_val, printer_id, 
backend_name);
+             PrinterObj *p = find_PrinterObj(f, printer_id, backend_name);
+             printf("%s : %s\n", option_name, option_val);
+             add_setting_to_printer(p, get_string_copy(option_name), 
get_string_copy(option_val));
+@@ -147,7 +147,7 @@
+         else if (strcmp(buf, "clear-setting") == 0)
+         {
+             char printer_id[100], backend_name[100], option_name[100];
+-            scanf("%s%s%s", option_name, printer_id, backend_name);
++            scanf("%99s%99s%99s", option_name, printer_id, backend_name);
+             PrinterObj *p = find_PrinterObj(f, printer_id, backend_name);
+             clear_setting_from_printer(p, option_name);
+         }
+@@ -155,7 +155,7 @@
+         {
+             char printer_id[100];
+             char backend_name[100];
+-            scanf("%s%s", printer_id, backend_name);
++            scanf("%99s%99s", printer_id, backend_name);
+             PrinterObj *p = find_PrinterObj(f, printer_id, backend_name);
+             printf("%s\n", get_state(p));
+         }
+@@ -163,7 +163,7 @@
+         {
+             char printer_id[100];
+             char backend_name[100];
+-            scanf("%s%s", printer_id, backend_name);
++            scanf("%99s%99s", printer_id, backend_name);
+             PrinterObj *p = find_PrinterObj(f, printer_id, backend_name);
+             printf("Accepting jobs ? : %d \n", is_accepting_jobs(p));
+         }
+@@ -174,14 +174,14 @@
+         else if (strcmp(buf, "ping") == 0)
+         {
+             char printer_id[100], backend_name[100];
+-            scanf("%s%s", printer_id, backend_name);
++            scanf("%99s%99s", printer_id, backend_name);
+             PrinterObj *p = find_PrinterObj(f, printer_id, backend_name);
+             print_backend_call_ping_sync(p->backend_proxy, p->id, NULL, NULL);
+         }
+         else if (strcmp(buf, "get-default-printer") == 0)
+         {
+             char backend_name[100];
+-            scanf("%s", backend_name);
++            scanf("%99s", backend_name);
+             /**
+              * Backend name = The last part of the backend dbus service
+              * Eg. "CUPS" or "GCP"
+@@ -191,7 +191,7 @@
+         else if (strcmp(buf, "print-file") == 0)
+         {
+             char printer_id[100], backend_name[100], file_path[200];
+-            scanf("%s%s%s", file_path, printer_id, backend_name);
++            scanf("%199s%99s%99s", file_path, printer_id, backend_name);
+             /**
+              * Try adding some settings here .. change them and experiment
+              */
+@@ -201,7 +201,7 @@
+             {
+               char final_file_path[200];
+               printf("Please give the final file path: ");
+-              scanf("%s", final_file_path);
++              scanf("%199s", final_file_path);
+               print_file_path(p, file_path, final_file_path);
+               continue;
+             }
+@@ -213,7 +213,7 @@
+         {
+             char printer_id[100];
+             char backend_name[100];
+-            scanf("%s%s", printer_id, backend_name);
++            scanf("%99s%99s", printer_id, backend_name);
+             PrinterObj *p = find_PrinterObj(f, printer_id, backend_name);
+             printf("%d jobs currently active.\n", get_active_jobs_count(p));
+         }
+@@ -235,7 +235,7 @@
+             char printer_id[100];
+             char backend_name[100];
+             char job_id[100];
+-            scanf("%s%s%s", job_id, printer_id, backend_name);
++            scanf("%99s%99s%99s", job_id, printer_id, backend_name);
+             PrinterObj *p = find_PrinterObj(f, printer_id, backend_name);
+             if (cancel_job(p, job_id))
+                 printf("Job %s has been cancelled.\n", job_id);
+@@ -247,7 +247,7 @@
+             char printer_id[100];
+             char backend_name[100];
+             char job_id[100];
+-            scanf("%s%s", printer_id, backend_name);
++            scanf("%99s%99s", printer_id, backend_name);
+             PrinterObj *p = find_PrinterObj(f, printer_id, backend_name);
+             pickle_printer_to_file(p, "/tmp/.printer-pickle", f);
+         }
+Index: cpdb-libs/lib/frontend_helper.c
+===================================================================
+--- cpdb-libs.orig/lib/frontend_helper.c       2023-06-28 06:57:31.699739106 
+0200
++++ cpdb-libs/lib/frontend_helper.c    2023-06-28 07:57:11.168548682 +0200
+@@ -171,7 +171,7 @@
+ 
+     FILE *file = fopen(path, "r");
+     char obj_path[200];
+-    fscanf(file, "%s", obj_path);
++    fscanf(file, "%199s", obj_path);
+     fclose(file);
+     free(path);
+     GError *error = NULL;
diff -Nru cpdb-libs-1.2.0/debian/patches/series 
cpdb-libs-1.2.0/debian/patches/series
--- cpdb-libs-1.2.0/debian/patches/series       2023-01-08 19:03:02.000000000 
+0100
+++ cpdb-libs-1.2.0/debian/patches/series       2023-06-27 22:03:02.000000000 
+0200
@@ -1,2 +1,3 @@
+CVE-2023-34095.patch
 no-profiling.patch
 manually-hardening.patch

Reply via email to