From 7d6e129f047477b074c5c98a6cd00fc94ddb8e55 Mon Sep 17 00:00:00 2001 From: ClaudioWayne <35531629+ClaudioWayne@users.noreply.github.com> Date: Mon, 21 Sep 2026 11:35:32 +0000 Subject: [PATCH] fix Guacamole Interactive Session (#3249) --- lib/cuckoo/core/database.py | 23 +++++++++++++++-------- web/submission/views.py | 4 ++-- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/lib/cuckoo/core/database.py b/lib/cuckoo/core/database.py index 9b7b9b5e3a7..67e0b5d19d6 100644 --- a/lib/cuckoo/core/database.py +++ b/lib/cuckoo/core/database.py @@ -265,19 +265,22 @@ def drop(self): def create_guac_session(self, token, task_id, vm_label, guest_ip): """Create a new guac session for a task.""" + session = self.session() try: - with self.session.begin(): - guac = GuacSession(token=str(token), task_id=task_id, vm_label=vm_label, guest_ip=guest_ip) - self.session.add(guac) + guac = GuacSession(token=str(token), task_id=task_id, vm_label=vm_label, guest_ip=guest_ip) + session.add(guac) + session.commit() return guac except Exception: + session.rollback() raise def get_guac_session(self, token): """Look up a guac session by token. Returns dict or None.""" from lib.cuckoo.core.data.guac_session import GuacSession + session = self.session() try: - row = self.session.query(GuacSession).filter_by(token=str(token)).first() + row = session.query(GuacSession).filter_by(token=str(token)).first() if row: return {"task_id": row.task_id, "vm_label": row.vm_label, "guest_ip": getattr(row, "guest_ip", None)} return None @@ -287,19 +290,23 @@ def get_guac_session(self, token): def delete_guac_session(self, token): """Delete a guac session token.""" from lib.cuckoo.core.data.guac_session import GuacSession + session = self.session() try: - with self.session.begin(): - self.session.query(GuacSession).filter_by(token=str(token)).delete() + session.query(GuacSession).filter_by(token=str(token)).delete() + session.commit() except Exception: + session.rollback() raise def delete_guac_sessions_for_task(self, task_id): """Delete all guac sessions for a task.""" from lib.cuckoo.core.data.guac_session import GuacSession + session = self.session() try: - with self.session.begin(): - self.session.query(GuacSession).filter_by(task_id=task_id).delete() + session.query(GuacSession).filter_by(task_id=task_id).delete() + session.commit() except Exception: + session.rollback() raise _DATABASE: Optional[_Database] = None diff --git a/web/submission/views.py b/web/submission/views.py index 4b081e7affb..15d456d5194 100644 --- a/web/submission/views.py +++ b/web/submission/views.py @@ -917,7 +917,7 @@ def status(request, task_id): if w_label: vm_label, guest_ip = w_label, (w_ip or "") if vm_label: - session_id = uuid3(NAMESPACE_DNS, task_id).hex[:16] + session_id = uuid3(NAMESPACE_DNS, str(task_id)).hex[:16] session_data = urlsafe_b64encode(f"{session_id}|{vm_label}|{guest_ip or ''}".encode("utf8")).decode("utf8") response["session_data"] = session_data @@ -954,7 +954,7 @@ def remote_session(request, task_id): if not vm_label: return render(request, "error.html", {"error": "Machine is not set for this task."}) machine_status = True - session_id = uuid3(NAMESPACE_DNS, task_id).hex[:16] + session_id = uuid3(NAMESPACE_DNS, str(task_id)).hex[:16] session_data = urlsafe_b64encode(f"{session_id}|{vm_label}|{guest_ip or ''}".encode("utf8")).decode("utf8") return render(