The branch, v3-5-stable has been updated via b1061ab Fix self granting privileges in security=ads. via 0b27880 WHASNEW: Release notes for 3.5.15. from 1cc0306 WHATSNEW: Start release notes for Samba 3.5.15.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-5-stable - Log ----------------------------------------------------------------- commit b1061ab00f59fdf4ebab622ab7a9c29a3aa51eee Author: Jeremy Allison <j...@samba.org> Date: Tue Apr 17 11:49:55 2012 -0700 Fix self granting privileges in security=ads. CVE-2012-2111 commit 0b278804b1aa020e03c89e9276408dd7097bb4d2 Author: Karolin Seeger <ksee...@samba.org> Date: Fri Apr 27 21:09:56 2012 +0200 WHASNEW: Release notes for 3.5.15. Karolin ----------------------------------------------------------------------- Summary of changes: WHATSNEW.txt | 16 +++++++++++----- source3/rpc_server/srv_lsa_nt.c | 20 ++++++++++++++------ 2 files changed, 25 insertions(+), 11 deletions(-) Changeset truncated at 500 lines: diff --git a/WHATSNEW.txt b/WHATSNEW.txt index 712748f..b588bfd 100644 --- a/WHATSNEW.txt +++ b/WHATSNEW.txt @@ -1,20 +1,26 @@ ============================== Release Notes for Samba 3.5.15 - , 2012 + April 30, 2012 ============================== -This is the latest stable release of Samba 3.5. +This is a security release in order to address +CVE-2012-2111 (Incorrect permission checks when granting/removing +privileges can compromise file server security). -Major enhancements in Samba 3.5.15 include: +o CVE-2012-2111: + Samba 3.4.x to 3.6.4 are affected by a + vulnerability that allows arbitrary users + to modify privileges on a file server. -o Changes since 3.5.14: --------------------- -o Stefan Metzmacher <me...@samba.org> +o Jeremy Allison <j...@samba.org> + * Fix incorrect permission checks when granting/removing + privileges (CVE-2012-2111). ###################################################################### diff --git a/source3/rpc_server/srv_lsa_nt.c b/source3/rpc_server/srv_lsa_nt.c index e903f0e..b9ea2d2 100644 --- a/source3/rpc_server/srv_lsa_nt.c +++ b/source3/rpc_server/srv_lsa_nt.c @@ -1691,6 +1691,10 @@ NTSTATUS _lsa_CreateAccount(pipes_struct *p, struct lsa_info *handle; struct lsa_info *info; uint32_t acc_granted; + uint32_t owner_access = (LSA_ACCOUNT_ALL_ACCESS & + ~(LSA_ACCOUNT_ADJUST_PRIVILEGES| + LSA_ACCOUNT_ADJUST_SYSTEM_ACCESS| + STD_RIGHT_DELETE_ACCESS)); struct security_descriptor *psd; size_t sd_size; @@ -1718,7 +1722,7 @@ NTSTATUS _lsa_CreateAccount(pipes_struct *p, status = make_lsa_object_sd(p->mem_ctx, &psd, &sd_size, &lsa_account_mapping, - r->in.sid, LSA_POLICY_ALL_ACCESS); + r->in.sid, owner_access); if (!NT_STATUS_IS_OK(status)) { return status; } @@ -1764,6 +1768,10 @@ NTSTATUS _lsa_OpenAccount(pipes_struct *p, size_t sd_size; uint32_t des_access = r->in.access_mask; uint32_t acc_granted; + uint32_t owner_access = (LSA_ACCOUNT_ALL_ACCESS & + ~(LSA_ACCOUNT_ADJUST_PRIVILEGES| + LSA_ACCOUNT_ADJUST_SYSTEM_ACCESS| + STD_RIGHT_DELETE_ACCESS)); NTSTATUS status; /* find the connection policy handle. */ @@ -1788,7 +1796,7 @@ NTSTATUS _lsa_OpenAccount(pipes_struct *p, /* get the generic lsa account SD until we store it */ status = make_lsa_object_sd(p->mem_ctx, &psd, &sd_size, &lsa_account_mapping, - r->in.sid, LSA_ACCOUNT_ALL_ACCESS); + r->in.sid, owner_access); if (!NT_STATUS_IS_OK(status)) { return status; } @@ -2174,10 +2182,10 @@ NTSTATUS _lsa_AddAccountRights(pipes_struct *p, return NT_STATUS_INVALID_HANDLE; } - /* get the generic lsa account SD for this SID until we store it */ + /* get the generic lsa account SD until we store it */ status = make_lsa_object_sd(p->mem_ctx, &psd, &sd_size, &lsa_account_mapping, - r->in.sid, LSA_ACCOUNT_ALL_ACCESS); + NULL, 0); if (!NT_STATUS_IS_OK(status)) { return status; } @@ -2245,10 +2253,10 @@ NTSTATUS _lsa_RemoveAccountRights(pipes_struct *p, return NT_STATUS_INVALID_HANDLE; } - /* get the generic lsa account SD for this SID until we store it */ + /* get the generic lsa account SD until we store it */ status = make_lsa_object_sd(p->mem_ctx, &psd, &sd_size, &lsa_account_mapping, - r->in.sid, LSA_ACCOUNT_ALL_ACCESS); + NULL, 0); if (!NT_STATUS_IS_OK(status)) { return status; } -- Samba Shared Repository