]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
smb/dce_opnum: use DCERPC_TYPE_REQUEST
authorEloy Pérez González <zer1t0ps@protonmail.com>
Fri, 22 Oct 2021 13:00:11 +0000 (15:00 +0200)
committerVictor Julien <vjulien@oisf.net>
Mon, 24 Jan 2022 14:37:54 +0000 (15:37 +0100)
The smb dce_opnum keyword doesn't match the dcerpc requests/responses.
This occurs because in the rs_smb_tx_match_dce_opnum function, the
x.req_cmd is matched against the erroneous code 1. Fix this by using
DCERPC_TYPE_REQUEST for the comparison instead.

Ticket: 4767

rust/src/smb/detect.rs

index b76a1bc3610adb267a817363cbc8acef4c144ea5..6072e1131b621572933e0291c59ba462f2ce5941 100644 (file)
@@ -19,6 +19,7 @@ use std::ptr;
 use crate::core::*;
 use crate::smb::smb::*;
 use crate::dcerpc::detect::{DCEIfaceData, DCEOpnumData, DETECT_DCE_OPNUM_RANGE_UNINITIALIZED};
+use crate::dcerpc::dcerpc::DCERPC_TYPE_REQUEST;
 
 #[no_mangle]
 pub unsafe extern "C" fn rs_smb_tx_get_share(tx: &mut SMBTransaction,
@@ -105,7 +106,7 @@ pub extern "C" fn rs_smb_tx_match_dce_opnum(tx: &mut SMBTransaction,
     SCLogDebug!("rs_smb_tx_get_dce_opnum: start");
     match tx.type_data {
         Some(SMBTransactionTypeData::DCERPC(ref x)) => {
-            if x.req_cmd == 1 { // REQUEST
+            if x.req_cmd == DCERPC_TYPE_REQUEST {
                 for range in dce_data.data.iter() {
                     if range.range2 == DETECT_DCE_OPNUM_RANGE_UNINITIALIZED {
                         if range.range1 == x.opnum as u32 {