Security
OpenBSD routes around POSIX
Theo de Raadt is unhappy with the current state of the standards-mandated "random" number generation in OpenBSD, so he is planning to largely ignore those standards going forward. Essentially he contends that by conflating two different modes of using random numbers, the standards consign all random-number-using programs to getting poor random numbers. He intends to change the behavior such that programs have to opt-in to the poorer quality randomness, but that means OpenBSD's random-number API will no longer be compliant with standards like POSIX, C89, and others.
The API in question is really three families of functions: rand()/srand(), random()/srandom(), and the xrand48()/srand48() functions. According to De Raadt's message to the OpenBSD tech mailing list, each of the three provides the same basic functionality and is used in one of two ways by programs in the OpenBSD ports tree: either always getting seeded (using srand() and friends) with something hard to predict (thus indicating an interest in good random numbers) or providing a means for the user to set the seed (to reproduce a sequence of "random" numbers). Because the same interface has to produce both, it dooms those wanting good random numbers to using a random number generator (RNG) that can produce reproducible results—"bad" random numbers in his eyes.
If seed values are constant or saved and passed into the seeding functions (e.g. srand()), the same sequence of random numbers must be produced, according to the standards—or maybe not; it could be implementation-dependent. Reusing the same random numbers can be useful for benchmarking, debugging, re-running simulations, or replaying that perfect game of Nethack. But it requires a certain kind of underlying RNG algorithm—one that is not periodically mixed with hard-to-predict (and impossible to reproduce) values, as modern cryptographic RNGs are. Some programs truly need the ability to replay random streams, which necessitates using weaker algorithms, but those that don't need it should not have to suffer with weaker random numbers.
While De Raadt speculated that perhaps this API came about from a similar process that produced the backdoored Dual_EC_DRBG algorithm, that seems rather unlikely. But the state of RNGs has certainly advanced since the standards were published, as has the understanding of (some of) those using them. De Raadt is an advocate of the arc4random() API, which does not provide any way to replay a stream of random numbers. His plan is to essentially replace the POSIX, et al. API with an arc4random()-based implementation—ignoring any requests for replaying the stream.
arc4random() is a cryptographic RNG that gets reseeded periodically from the OpenBSD kernel random number subsystem. It is similar to the Linux /dev/urandom device and the recently added getrandom() system call.
The idea is that no programs in the ports tree (or otherwise built for OpenBSD) would need to change, but when calling rand() and friends would suddenly start getting stronger random numbers coming from arc4random(). Any seed value provided would be ignored, so programs that depend on that mode will need to change. A call to srand_deterministic() (or the equivalent for the other families) would switch the RNG from arc4random() mode to the older, weaker algorithm that can provide reproducible random streams.
Based on his analysis, a little over 100 of the 8800 packages in ports will require an addition of a call to srand_deterministic() to get the old behavior. That means 8700 packages will now get strong random numbers if they use random numbers at all (1285 packages use the random API directly, but some of those are libraries, which may be used by other packages). The cost is:
Since OpenBSD releases its kernel and ports in lockstep, there should be fewer problems than if Linux (or Glibc, really) tried to do this. There is also the small matter of standards compliance. The Linux kernel has sometimes ignored standards when there was a good reason, but Glibc tends to be a lot more conservative about such changes, so switching to non-deterministic random numbers for rand() and friends is unlikely to ever happen for Linux. That's too bad, in some ways, since De Raadt is right about the weakness of the random API. Someday, attackers may find a way to predict the random numbers generated by some program on Linux—with disastrous consequences.
Brief items
Security quotes of the week
srandom(12346);Careful, that’s a 6 not a 5. Unpredictable, no?
Hexadecimal is the preferred numeric notation of the serious programmer.
srand(0x1234);Humor is common.
srand(0xabad1dea);
Linux software nasty slithers out of online watering holes (The Register)
The Turla trojan malware has been found to run on Linux, reports The Register. "[Kaspersky researcher Kurt] Baumgartner said the module written in C and C++ was hardened against reverse-engineering through the use of stripped symbol information and hidden network communications, adding it could not be discovered using Netstat. It contained attack capabilities which did not require root privileges including arbitrary remote command execution, incoming packet interception and remote management."
An extensive set of X.org vulnerabilities
The X.Org developers have released an advisory warning of a large set of vulnerabilities in the server, some of which date back to the X11R1 release in 1987. "How critical these vulnerabilities are to any given installation depends on whether they run an X server with root privileges or reduced privileges; whether they run X servers exposed to network clients or limited to local connections; and whether or not they allow use of the affected protocol extensions, especially the GLX extension."
New vulnerabilities
bind9: denial of service
Package(s): | bind9 | CVE #(s): | CVE-2014-8500 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | December 9, 2014 | Updated: | February 17, 2015 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the Debian advisory:
It was discovered that BIND, a DNS server, is prone to a denial of service vulnerability. By making use of maliciously-constructed zones or a rogue server, an attacker can exploit an oversight in the code BIND 9 uses to follow delegations in the Domain Name Service, causing BIND to issue unlimited queries in an attempt to follow the delegation. This can lead to resource exhaustion and denial of service (up to and including termination of the named server process.) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
binutils: multiple vulnerabilities
Package(s): | arm-none-eabi-binutils-cs | CVE #(s): | CVE-2014-8501 CVE-2014-8502 CVE-2014-8503 CVE-2014-8504 CVE-2014-8738 CVE-2014-8737 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | December 8, 2014 | Updated: | November 24, 2015 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the Red Hat bugzilla:
CVE-2014-8737: Directory traversal vulnerability allowing random files deletion/creation was reported in binutils. CVE-2014-8502: A heap overflow was reported when running objdump on a specially crafted PE executable. CVE-2014-8504: Stack overflow issue was reported in SREC parser in binutils. CVE-2014-8501: It was reported that running strings, nm or objdump on a constructed PE file leads to out-of bounds write to an uninitialized memory area. CVE-2014-8738: It was reported that objdump will try to overwrite part of memory when processing a crafted "ar" archive file. From the Fedora advisory: CVE-2014-8503: stack overflow in objdump when parsing specially crafted ihex file. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
docker: privilege escalation
Package(s): | docker | CVE #(s): | CVE-2014-6407 CVE-2014-6408 | ||||||||||||
Created: | December 8, 2014 | Updated: | December 10, 2014 | ||||||||||||
Description: | From the openSUSE bug reports:
CVE-2014-6407: The Docker engine, up to and including version 1.3.1, was vulnerable to extracting files to arbitrary paths on the host during ‘docker pull’ and ‘docker load’ operations. This was caused by symlink and hardlink traversals present in Docker's image extraction. This vulnerability could be leveraged to perform remote code execution and privilege escalation. Docker 1.3.2 remedies this vulnerability. Additional checks have been added to pkg/archive and image extraction is now performed in a chroot. No remediation is available for older versions of Docker and users are advised to upgrade. CVE-2014-6408: Docker versions 1.3.0 through 1.3.1 allowed security options to be applied to images, allowing images to modify the default run profile of containers executing these images. This vulnerability could allow a malicious image creator to loosen the restrictions applied to a container’s processes, potentially facilitating a break-out. Docker 1.3.2 remedies this vulnerability. Security options applied to images are no longer consumed by the Docker engine and will be ignored. Users are advised to upgrade. | ||||||||||||||
Alerts: |
|
firefox, thunderbird: information leak
Package(s): | firefox, thunderbird | CVE #(s): | CVE-2014-1569 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | December 4, 2014 | Updated: | March 2, 2015 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the Mageia advisory: In the QuickDER decoder in NSS before 3.17.3, ASN.1 DER decoding of lengths is too permissive, allowing undetected smuggling of arbitrary data. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
firefox: multiple vulnerabilities
Package(s): | firefox | CVE #(s): | CVE-2014-8631 CVE-2014-8632 | ||||||||||||||||
Created: | December 4, 2014 | Updated: | December 10, 2014 | ||||||||||||||||
Description: | From the Mozilla advisory: Mozilla developer Bobby Holley discovered two issues involving security wrappers. The first of these issues occurs when XrayWrappers filter object properties. When validation of the object initially occurs, one set of object properties will appear to be available. Later, when the XrayWrappers are removed, a more expansive set of properties is available. These are then stored without further validation, making these properties available and bypassing security protections that would normally protect them from access. (CVE-2014-8632) The second issue occurs when chrome objects are protected by Chrome Object Wrappers (COW) and are passed as native interfaces. If this is done with some methods, normally protected objects may be accessible to native methods exposed to web content. (CVE-2014-8631) | ||||||||||||||||||
Alerts: |
|
graphviz: format string vulnerability
Package(s): | graphviz | CVE #(s): | CVE-2014-9157 | ||||||||||||||||||||||||||||
Created: | December 8, 2014 | Updated: | April 2, 2015 | ||||||||||||||||||||||||||||
Description: | From the CVE entry:
Format string vulnerability in the yyerror function in lib/cgraph/scan.l in Graphviz allows remote attackers to have unspecified impact via format string specifiers in unknown vector, which are not properly handled in an error string. | ||||||||||||||||||||||||||||||
Alerts: |
|
hivex: invalid hive files
Package(s): | hivex | CVE #(s): | |||||||||
Created: | December 8, 2014 | Updated: | December 10, 2014 | ||||||||
Description: | From the Fedora advisory:
Hive files are the undocumented binary files that Windows uses to store the Windows Registry on disk. Hivex is a library that can read and write to these files. 'hivexsh' is a shell you can use to interactively navigate a hive binary file. 'hivexregedit' lets you export and merge to the textual regedit format. 'hivexml' can be used to convert a hive file to a more useful XML format. In order to get access to the hive files themselves, you can copy them from a Windows machine. They are usually found in %systemroot%\system32\config. For virtual machines we recommend using libguestfs or guestfish to copy out these files. libguestfs also provides a useful high-level tool called 'virt-win-reg' (based on hivex technology) which can be used to query specific registry keys in an existing Windows VM. | ||||||||||
Alerts: |
|
httpd24-httpd: denial of service
Package(s): | httpd24-httpd | CVE #(s): | CVE-2014-3581 | ||||||||||||||||||||||||||||||||||||||||||||
Created: | December 10, 2014 | Updated: | December 10, 2014 | ||||||||||||||||||||||||||||||||||||||||||||
Description: | From the CVE entry:
The cache_merge_headers_out function in modules/cache/cache_util.c in the mod_cache module in the Apache HTTP Server before 2.4.11 allows remote attackers to cause a denial of service (NULL pointer dereference and application crash) via an empty HTTP Content-Type header. | ||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
icecast: privilege escalation
Package(s): | icecast | CVE #(s): | CVE-2014-9091 | ||||||||||||||||||||
Created: | December 8, 2014 | Updated: | December 10, 2014 | ||||||||||||||||||||
Description: | From the openSUSE bug report:
It was found that when the UID and GID were changed in the <changeowner> section of the /etc/icecast.xml file, the supplementary groups were left in place. This could allow an attacker to escalate their privileges if the <changeowner> configuration was used. The fix was added in version 2.4.0. | ||||||||||||||||||||||
Alerts: |
|
jasper: code execution
Package(s): | jasper | CVE #(s): | CVE-2014-9029 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | December 4, 2014 | Updated: | December 19, 2014 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the Debian advisory: Josh Duart of the Google Security Team discovered heap-based buffer overflow flaws in JasPer, a library for manipulating JPEG-2000 files, which could lead to denial of service (application crash) or the execution of arbitrary code. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
kernel: two vulnerabilities
Package(s): | kernel | CVE #(s): | CVE-2014-8884 CVE-2014-9090 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | December 9, 2014 | Updated: | March 20, 2015 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the CVE entries:
Stack-based buffer overflow in the ttusbdecfe_dvbs_diseqc_send_master_cmd function in drivers/media/usb/ttusb-dec/ttusbdecfe.c in the Linux kernel before 3.17.4 allows local users to cause a denial of service (system crash) or possibly gain privileges via a large message length in an ioctl call. (CVE-2014-8884) The do_double_fault function in arch/x86/kernel/traps.c in the Linux kernel through 3.17.4 does not properly handle faults associated with the Stack Segment (SS) segment register, which allows local users to cause a denial of service (panic) via a modify_ldt system call, as demonstrated by sigreturn_32 in the linux-clock-tests test suite. (CVE-2014-9090) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
libvirt: multiple vulnerabilities
Package(s): | libvirt | CVE #(s): | CVE-2013-4292 CVE-2013-4297 CVE-2013-4399 CVE-2013-4400 | ||||
Created: | December 9, 2014 | Updated: | December 10, 2014 | ||||
Description: | From the CVE entries:
libvirt 1.1.0 and 1.1.1 allows local users to cause a denial of service (memory consumption) via a large number of domain migrate parameters in certain RPC calls in (1) daemon/remote.c and (2) remote/remote_driver.c. (CVE-2013-4292) The virFileNBDDeviceAssociate function in util/virfile.c in libvirt 1.1.2 and earlier allows remote authenticated users to cause a denial of service (uninitialized pointer dereference and crash) via unspecified vectors. (CVE-2013-4297) virt-login-shell in libvirt 1.1.2 through 1.1.3 allows local users to overwrite arbitrary files and possibly gain privileges via unspecified environment variables or command-line arguments. (CVE-2013-4400) Unspecified vulnerability (CVE-2013-4399) | ||||||
Alerts: |
|
MAAS: privilege escalation
Package(s): | MAAS | CVE #(s): | |||||
Created: | December 5, 2014 | Updated: | December 10, 2014 | ||||
Description: | From the Ubuntu advisory: USN-2431-1 fixed vulnerabilities in mod_wsgi. The security update exposed an issue in the MAAS package, causing a regression. This update fixes the problem. We apologize for the inconvenience. Original advisory details: It was discovered that mod_wsgi incorrectly handled errors when setting up the working directory and group access rights. A malicious application could possibly use this issue to cause a local privilege escalation when using daemon mode. | ||||||
Alerts: |
|
mediawiki: multiple vulnerabilities
Package(s): | mediawiki | CVE #(s): | CVE-2014-9276 CVE-2014-9277 | ||||||||||||||||||||||||
Created: | December 4, 2014 | Updated: | December 15, 2014 | ||||||||||||||||||||||||
Description: | From the Mageia bug report: In MediaWiki before 1.23.7, a missing CSRF check could allow reflected XSS on wikis that allow raw HTML (CVE-2014-9276). MediaWiki's | ||||||||||||||||||||||||||
Alerts: |
|
nodejs: multiple vulnerabilities
Package(s): | nodejs | CVE #(s): | CVE-2014-5256 CVE-2013-6668 | ||||||||
Created: | December 10, 2014 | Updated: | December 10, 2014 | ||||||||
Description: | From the CVE entries:
Node.js 0.8 before 0.8.28 and 0.10 before 0.10.30 does not consider the possibility of recursive processing that triggers V8 garbage collection in conjunction with a V8 interrupt, which allows remote attackers to cause a denial of service (memory corruption and application crash) via deep JSON objects whose parsing lets this interrupt mask an overflow of the program stack. (CVE-2014-5256) Multiple unspecified vulnerabilities in Google V8 before 3.24.35.10, as used in Google Chrome before 33.0.1750.146, allow attackers to cause a denial of service or possibly have other impact via unknown vectors. (CVE-2013-6668) | ||||||||||
Alerts: |
|
openafs: denial of service
Package(s): | openafs | CVE #(s): | CVE-2014-2852 CVE-2014-4044 | ||||
Created: | December 10, 2014 | Updated: | December 10, 2014 | ||||
Description: | From the CVE entries:
OpenAFS before 1.6.7 delays the listen thread when an RXS_CheckResponse fails, which allows remote attackers to cause a denial of service (performance degradation) via an invalid packet. (CVE-2014-2852) OpenAFS 1.6.8 does not properly clear the fields in the host structure, which allows remote attackers to cause a denial of service (uninitialized memory access and crash) via unspecified vectors related to TMAY requests. (CVE-2014-4044) | ||||||
Alerts: |
|
phpmyadmin: denial of service
Package(s): | phpmyadmin | CVE #(s): | CVE-2014-9218 | ||||||||||||||||||||||||||||||||
Created: | December 5, 2014 | Updated: | December 12, 2014 | ||||||||||||||||||||||||||||||||
Description: | From the Mageia advisory: In phpMyAdmin before 4.1.14.8, with very long passwords it was possible to initiate a denial of service attack on phpMyAdmin. | ||||||||||||||||||||||||||||||||||
Alerts: |
|
php-pear-HTML_AJAX: code execution
Package(s): | php-pear-HTML_AJAX | CVE #(s): | |||||
Created: | December 10, 2014 | Updated: | December 10, 2014 | ||||
Description: | From the Mageia advisory:
The HTML_AJAX pear module before version 0.5.7 is vulnerable to a bug that can allow for remote code execution through unspecified vectors. | ||||||
Alerts: |
|
qemu: privilege escalation
Package(s): | qemu | CVE #(s): | CVE-2014-8106 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | December 4, 2014 | Updated: | April 28, 2015 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the Debian advisory: Paolo Bonzini of Red Hat discovered that the blit region checks were insufficient in the Cirrus VGA emulator in qemu, a fast processor emulator. A privileged guest user could use this flaw to write into qemu address space on the host, potentially escalating their privileges to those of the qemu host process. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
rpm: code execution
Package(s): | rpm | CVE #(s): | CVE-2013-6435 CVE-2014-8118 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | December 10, 2014 | Updated: | November 4, 2016 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the Red Hat advisory:
It was found that RPM wrote file contents to the target installation directory under a temporary name, and verified its cryptographic signature only after the temporary file has been written completely. Under certain conditions, the system interprets the unverified temporary file contents and extracts commands from it. This could allow an attacker to modify signed RPM files in such a way that they would execute code chosen by the attacker during package installation. (CVE-2013-6435) It was found that RPM could encounter an integer overflow, leading to a stack-based buffer overflow, while parsing a crafted CPIO header in the payload section of an RPM file. This could allow an attacker to modify signed RPM files in such a way that they would execute code chosen by the attacker during package installation. (CVE-2014-8118) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
tcpdump: code execution
Package(s): | tcpdump | CVE #(s): | CVE-2014-9140 | ||||||||||||||||||||||||||||||||||||||||
Created: | December 4, 2014 | Updated: | January 8, 2015 | ||||||||||||||||||||||||||||||||||||||||
Description: | From the Ubuntu advisory: It was discovered that tcpdump incorrectly handled printing PPP packets. A remote attacker could use this issue to cause tcpdump to crash, resulting in a denial of service, or possibly execute arbitrary code. | ||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
util-linux: command injection
Package(s): | util-linux | CVE #(s): | CVE-2014-9114 | ||||||||||||||||||||||||||||
Created: | December 4, 2014 | Updated: | December 6, 2016 | ||||||||||||||||||||||||||||
Description: | From the Red Hat bug report: Sebastian Krahmer reported a command injection flaw in blkid. This could possibly result in command execution with root privileges (for example, when running blkid on a malicious USB drive). | ||||||||||||||||||||||||||||||
Alerts: |
|
xorg-server: multiple vulnerabilities
Package(s): | xorg-server | CVE #(s): | CVE-2014-8091 CVE-2014-8092 CVE-2014-8093 CVE-2014-8094 CVE-2014-8095 CVE-2014-8096 CVE-2014-8097 CVE-2014-8098 CVE-2014-8099 CVE-2014-8100 CVE-2014-8101 CVE-2014-8102 CVE-2014-8103 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | December 10, 2014 | Updated: | January 15, 2015 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the X.org advisory:
Ilja van Sprundel, a security researcher with IOActive, has discovered a large number of issues in the way the X server code base handles requests from X clients, and has worked with X.Org's security team to analyze, confirm, and fix these issues. The vulnerabilities could be exploited to cause the X server to access uninitialized memory or overwrite arbitrary memory in the X server process. This can cause a denial of service (e.g., an X server segmentation fault), or could be exploited to achieve arbitrary code execution. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
yaml, perl-YAML-LibYAML: denial of service
Package(s): | yaml, perl-YAML-LibYAML | CVE #(s): | CVE-2014-9130 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Created: | December 5, 2014 | Updated: | April 6, 2015 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description: | From the Mageia advisory: An assertion failure was found in the way the libyaml library parsed wrapped strings. An attacker able to load specially crafted YAML input into an application using libyaml could cause the application to crash. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Alerts: |
|
Page editor: Jake Edge
Next page:
Kernel development>>