mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-05-07 05:10:20 +00:00
samba: Security Advisory - CVE-2013-4475
Samba 3.x before 3.6.20, 4.0.x before 4.0.11, and 4.1.x before 4.1.1, when vfs_streams_depot or vfs_streams_xattr is enabled, allows remote attackers to bypass intended file restrictions by leveraging ACL differences between a file and an associated alternate data stream (ADS). http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-4475 Signed-off-by: Yue Tao <Yue.Tao@windriver.com> Signed-off-by: Chong Lu <Chong.Lu@windriver.com> Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
This commit is contained in:
committed by
Martin Jansa
parent
69e765c464
commit
18e196f16e
@@ -0,0 +1,102 @@
|
|||||||
|
Upstream-Status: Backport
|
||||||
|
|
||||||
|
From 928910f01f951657ea4629a6d573ac00646d16f8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jeremy Allison <jra@samba.org>
|
||||||
|
Date: Thu, 31 Oct 2013 13:48:42 -0700
|
||||||
|
Subject: [PATCH] Fix bug #10229 - No access check verification on stream
|
||||||
|
files.
|
||||||
|
|
||||||
|
https://bugzilla.samba.org/show_bug.cgi?id=10229
|
||||||
|
|
||||||
|
We need to check if the requested access mask
|
||||||
|
could be used to open the underlying file (if
|
||||||
|
it existed), as we're passing in zero for the
|
||||||
|
access mask to the base filename.
|
||||||
|
|
||||||
|
Signed-off-by: Jeremy Allison <jra@samba.org>
|
||||||
|
---
|
||||||
|
source3/smbd/open.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 61 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
|
||||||
|
index 447de80..441b8cd 100644
|
||||||
|
--- a/source3/smbd/open.c
|
||||||
|
+++ b/source3/smbd/open.c
|
||||||
|
@@ -152,6 +152,48 @@ NTSTATUS smbd_check_open_rights(struct connection_struct *conn,
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
+ Ensure when opening a base file for a stream open that we have permissions
|
||||||
|
+ to do so given the access mask on the base file.
|
||||||
|
+****************************************************************************/
|
||||||
|
+
|
||||||
|
+static NTSTATUS check_base_file_access(struct connection_struct *conn,
|
||||||
|
+ struct smb_filename *smb_fname,
|
||||||
|
+ uint32_t access_mask)
|
||||||
|
+{
|
||||||
|
+ uint32_t access_granted = 0;
|
||||||
|
+ NTSTATUS status;
|
||||||
|
+
|
||||||
|
+ status = smbd_calculate_access_mask(conn, smb_fname,
|
||||||
|
+ false,
|
||||||
|
+ access_mask,
|
||||||
|
+ &access_mask);
|
||||||
|
+ if (!NT_STATUS_IS_OK(status)) {
|
||||||
|
+ DEBUG(10, ("smbd_calculate_access_mask "
|
||||||
|
+ "on file %s returned %s\n",
|
||||||
|
+ smb_fname_str_dbg(smb_fname),
|
||||||
|
+ nt_errstr(status)));
|
||||||
|
+ return status;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (access_mask & (FILE_WRITE_DATA|FILE_APPEND_DATA)) {
|
||||||
|
+ uint32_t dosattrs;
|
||||||
|
+ if (!CAN_WRITE(conn)) {
|
||||||
|
+ return NT_STATUS_ACCESS_DENIED;
|
||||||
|
+ }
|
||||||
|
+ dosattrs = dos_mode(conn, smb_fname);
|
||||||
|
+ if (IS_DOS_READONLY(dosattrs)) {
|
||||||
|
+ return NT_STATUS_ACCESS_DENIED;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+ return smbd_check_open_rights(conn,
|
||||||
|
+ smb_fname,
|
||||||
|
+ access_mask,
|
||||||
|
+ &access_granted);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/****************************************************************************
|
||||||
|
fd support routines - attempt to do a dos_open.
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
@@ -3227,6 +3269,25 @@ static NTSTATUS create_file_unixpath(connection_struct *conn,
|
||||||
|
if (SMB_VFS_STAT(conn, smb_fname_base) == -1) {
|
||||||
|
DEBUG(10, ("Unable to stat stream: %s\n",
|
||||||
|
smb_fname_str_dbg(smb_fname_base)));
|
||||||
|
+ } else {
|
||||||
|
+ /*
|
||||||
|
+ * https://bugzilla.samba.org/show_bug.cgi?id=10229
|
||||||
|
+ * We need to check if the requested access mask
|
||||||
|
+ * could be used to open the underlying file (if
|
||||||
|
+ * it existed), as we're passing in zero for the
|
||||||
|
+ * access mask to the base filename.
|
||||||
|
+ */
|
||||||
|
+ status = check_base_file_access(conn,
|
||||||
|
+ smb_fname_base,
|
||||||
|
+ access_mask);
|
||||||
|
+
|
||||||
|
+ if (!NT_STATUS_IS_OK(status)) {
|
||||||
|
+ DEBUG(10, ("Permission check "
|
||||||
|
+ "for base %s failed: "
|
||||||
|
+ "%s\n", smb_fname->base_name,
|
||||||
|
+ nt_errstr(status)));
|
||||||
|
+ goto fail;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Open the base file. */
|
||||||
|
--
|
||||||
|
1.8.4.1
|
||||||
|
|
||||||
@@ -34,6 +34,7 @@ SRC_URI += "\
|
|||||||
file://0001-PIDL-fix-parsing-linemarkers-in-preprocessor-output.patch;patchdir=.. \
|
file://0001-PIDL-fix-parsing-linemarkers-in-preprocessor-output.patch;patchdir=.. \
|
||||||
file://samba-3.6.11-CVE-2013-0213-CVE-2013-0214.patch;patchdir=.. \
|
file://samba-3.6.11-CVE-2013-0213-CVE-2013-0214.patch;patchdir=.. \
|
||||||
file://samba-3.6.16-CVE-2013-4124.patch;patchdir=.. \
|
file://samba-3.6.16-CVE-2013-4124.patch;patchdir=.. \
|
||||||
|
file://samba-3.6.19-CVE-2013-4475.patch;patchdir=.. \
|
||||||
"
|
"
|
||||||
SRC_URI[md5sum] = "fbb245863eeef2fffe172df779a217be"
|
SRC_URI[md5sum] = "fbb245863eeef2fffe172df779a217be"
|
||||||
SRC_URI[sha256sum] = "4f5a171a8d902c6b4f822ed875c51eb8339196d9ccf0ecd7f6521c966b3514de"
|
SRC_URI[sha256sum] = "4f5a171a8d902c6b4f822ed875c51eb8339196d9ccf0ecd7f6521c966b3514de"
|
||||||
|
|||||||
Reference in New Issue
Block a user