wiki:Errata

Version 5 (modified by Dag-Erling Smørgrav, 7 years ago) (diff)

Add a TOC

Errata

Configuration parsing

Date
2013-03-04
Affects
Micrampelis
References
http://blog.des.no/2013/03/on-testing-part-ii/
Description
When openpam_readword() encounters a string in which unquoted text precedes quoted text, it will return an empty string. This affects the PAM policy parser as well as any third-party code that relies on openpam_readword() and / or openpam_readlinev().
Workaround
Quote the entire string, e.g. "text=hello world" instead of text="hello world".
Fix
Apply r634 and r636.

Service name validation

Date
2011-11-08
Affects
All releases prior to Lycopsida
References
http://c-skills.blogspot.com/2011/11/openpam-trickery.html
Description
Some setuid programs (e.g. KDE's kcheckpass) allow the user to specify the service name. Due to insufficient validation in OpenPAM's configuration parser, this can be exploited to load a PAM policy from an arbitrary (user-crafted) file and thus execute arbitrary code with root privileges.
Workaround
Remove or restrict any program that allows the user to specify the service name.
Fix
OpenPAM Lycopsida features a completely rewritten configuration parser. If you are unable or unwilling to upgrade, apply the following patch (courtesy of NetBSD's Matthias Drochner):
--- lib/openpam_configure.c	(revision 228464)
+++ lib/openpam_configure.c	(revision 228465)
@@ -285,6 +285,13 @@
 	size_t len;
 	int r;
 
+	/* don't allow to escape from policy_path */
+	if (strchr(service, '/')) {
+		openpam_log(PAM_LOG_ERROR, "invalid service name: %s",
+		    service);
+		return (-PAM_SYSTEM_ERR);
+	}
+
 	for (path = openpam_policy_path; *path != NULL; ++path) {
 		len = strlen(*path);
 		if ((*path)[len - 1] == '/') {