La seguridad de un software no es un software de seguridad. Nos preocupamos de cuestiones como la autenticación, el control de acceso, la confidencialidad, la criptografía y la gestión de privilegios.
12345
.
...
kind: KubeletConfiguration
...
readOnlyPort: 12345
...
default
. Para cada cuenta de servicio, se genera automáticamente un token de acceso a la API que pasa a estar disponible en un directorio montado. Los atacantes pueden usar el token de acceso en cualquier contenedor comprometido para obtener acceso a las API de servicio sensibles a la seguridad y con protección insuficiente.automountServiceAccountToken
no está definido o la configuración de la cuenta de servicio predeterminada contiene el ajuste automountServiceAccountToken: true
.default
de un Pod se automontan si automountServiceAccountToken
no está definido o se ha configurado en true
, como en este ejemplo.Ejemplo 2: Las credenciales de API se automontan para un Pod porque hay un ajuste
apiVersion: v1
kind: ServiceAccount
metadata:
name: default
namespace: demo-namespace
automountServiceAccountToken: true
...
automountServiceAccountToken: true
en la cuenta de servicio default
, como en este ejemplo.
apiVersion: v1
kind: Pod
...
spec:
automountServiceAccountToken: true
...
--use-service-account-credentials=true
. Esta marca le indica al administrador de controladores que inicie cada controlador con una cuenta de servicio independiente. Cuando se usa en combinación con el control de acceso basado en roles (RBAC, por sus siglas en inglés), se garantiza que cada controlador se ejecute con los permisos mínimos necesarios para realizar sus tareas.--use-service-account-credentials
.
apiVersion: v1
kind: Pod
...
spec:
containers:
- command:
- /usr/local/bin/kube-controller-manager
image: k8s.gcr.io/kube-controller-manager:v1.9.7
...
--token-auth-file
, la siguiente configuración inicia un servidor API de Kubernetes que autentica las solicitudes mediante tokens estáticos.
...
spec:
containers:
- command:
- kube-apiserver
...
- --token-auth-file=<filename>
...
chroot()
debe descartarse justo después de que se realice la operación.chroot()
, debe adquirir primero el privilegio root
. Una vez completada la operación con privilegios, el programa debería descartar el privilegio root
y restablecer el nivel de privilegios del usuario que realiza la llamada.chroot()
para restringir la aplicación a un subconjunto del sistema de archivos por debajo de APP_HOME
a fin de impedir que un atacante utilice el programa para obtener acceso a los archivos ubicados en otra ubicación. A continuación, el código abre el archivo especificado por el usuario y procesa su contenido.
...
chroot(APP_HOME);
chdir("/");
FILE* data = fopen(argv[1], "r+");
...
setuid()
con valores distintos a cero implica que la aplicación sigue funcionando con los privilegios root
innecesarios. Cualquier ataque con éxito que lleve a cabo un usuario malintencionado contra la aplicación puede provocar ahora un ataque de extensión de privilegios debido a que todas las operaciones maliciosas se realizarán con el privilegio de superusuario. Si la aplicación cambia al nivel de privilegios de un usuario que no sea root
, los posibles daños se reducen considerablemente.clone()
.clone()
de la clase, no se invoca el constructor para la clase que se está clonando. Así pues, si hay una comprobación SecurityManager o AccessController en el constructor de una clase clonable, debe estar presente la misma comprobación en el método de clonación de la clase. De no ser así, la comprobación de seguridad se derivará cuando se clone la clase.SecurityManager
en el constructor, pero no en el método clone()
.
public class BadSecurityCheck implements Cloneable {
private int id;
public BadSecurityCheck() {
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPermission(new BadPermission("BadSecurityCheck"));
}
id = 1;
}
public Object clone() throws CloneNotSupportedException {
BadSecurityCheck bsm = (BadSecurityCheck)super.clone();
return null;
}
}
SecurityManager
en su constructor tiene que realizar la misma comprobación en sus métodos readObject()
y readObjectNoData
.readObject()
de una clase serializable, no se invoca el constructor para la clase que se está deserializando. Así pues, si hay una comprobación SecurityManager
en el constructor de una clase serializable, también debe estar presente la misma comprobación SecurityManager
en los métodos readObject()
y readObjectNoData()
. De no ser así, la comprobación de seguridad se derivará cuando la clase se deserialice.SecurityManager
en el constructor, pero no en los métodos readObject()
y readObjectNoData()
.
public class BadSecurityCheck implements Serializable {
private int id;
public BadSecurityCheck() {
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPermission(new BadPermission("BadSecurityCheck"));
}
id = 1;
}
public void readObject(ObjectInputStream in) throws ClassNotFoundException, IOException {
in.defaultReadObject();
}
public void readObjectNoData(ObjectInputStream in) throws ClassNotFoundException, IOException {
in.defaultReadObject();
}
}
...
var fs:FileStream = new FileStream();
fs.open(new File("config.properties"), FileMode.READ);
var password:String = fs.readMultiByte(fs.bytesAvailable, File.systemCharset);
URLRequestDefaults.setLoginCredentialsForHost(hostname, usr, password);
...
password
. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
string password = regKey.GetValue(passKey).ToString());
NetworkCredential netCred =
new NetworkCredential(username,password,domain);
...
password
. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
RegQueryValueEx(hkey,TEXT(.SQLPWD.),NULL,
NULL,(LPBYTE)password, &size);
rc = SQLConnect(*hdbc, server, SQL_NTS, uid,
SQL_NTS, password, SQL_NTS);
...
password
. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
01 RECORD.
05 UID PIC X(10).
05 PASSWORD PIC X(10).
...
EXEC CICS
READ
FILE('CFG')
INTO(RECORD)
RIDFLD(ACCTNO)
...
END-EXEC.
EXEC SQL
CONNECT :UID
IDENTIFIED BY :PASSWORD
AT :MYCONN
USING :MYSERVER
END-EXEC.
...
CFG
puede leer el valor de la contraseña. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
<cfquery name = "GetCredentials" dataSource = "master">
SELECT Username, Password
FROM Credentials
WHERE DataSource="users"
</cfquery>
...
<cfquery name = "GetSSNs" dataSource = "users"
username = "#Username#" password = "#Password#">
SELECT SSN
FROM Users
</cfquery>
...
master
puede leer el valor de Username
y Password
. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
file, _ := os.Open("config.json")
decoder := json.NewDecoder(file)
decoder.Decode(&values)
request.SetBasicAuth(values.Username, values.Password)
...
values.Password
. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
Properties prop = new Properties();
prop.load(new FileInputStream("config.properties"));
String password = prop.getProperty("password");
DriverManager.getConnection(url, usr, password);
...
password
. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
webview.setWebViewClient(new WebViewClient() {
public void onReceivedHttpAuthRequest(WebView view,
HttpAuthHandler handler, String host, String realm) {
String[] credentials = view.getHttpAuthUsernamePassword(host, realm);
String username = credentials[0];
String password = credentials[1];
handler.proceed(username, password);
}
});
...
...
obj = new XMLHttpRequest();
obj.open('GET','/fetchusers.jsp?id='+form.id.value,'true','scott','tiger');
...
plist
y la utiliza para descomprimir un archivo protegido con contraseña.
...
NSDictionary *dict= [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Config" ofType:@"plist"]];
NSString *password = [dict valueForKey:@"password"];
[SSZipArchive unzipFileAtPath:zipPath toDestination:destPath overwrite:TRUE password:password error:&error];
...
...
$props = file('config.properties', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$password = $props[0];
$link = mysql_connect($url, $usr, $password);
if (!$link) {
die('Could not connect: ' . mysql_error());
}
...
password
. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
ip_address := OWA_SEC.get_client_ip;
IF ((OWA_SEC.get_user_id = 'scott') AND
(OWA_SEC.get_password = 'tiger') AND
(ip_address(1) = 144) and (ip_address(2) = 25)) THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
...
...
props = os.open('config.properties')
password = props[0]
link = MySQLdb.connect (host = "localhost",
user = "testuser",
passwd = password,
db = "test")
...
password
. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
require 'pg'
...
passwd = ENV['PASSWD']
...
conn = PG::Connection.new(:dbname => "myApp_production", :user => username, :password => passwd, :sslmode => 'require')
PASSWD
. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
val prop = new Properties()
prop.load(new FileInputStream("config.properties"))
val password = prop.getProperty("password")
DriverManager.getConnection(url, usr, password)
...
config.properties
puede leer el valor de password
. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.plist
y la utiliza para descomprimir un archivo protegido con contraseña.
...
var myDict: NSDictionary?
if let path = NSBundle.mainBundle().pathForResource("Config", ofType: "plist") {
myDict = NSDictionary(contentsOfFile: path)
}
if let dict = myDict {
zipArchive.unzipOpenFile(zipPath, password:dict["password"])
}
...
...
Private Declare Function GetPrivateProfileString _
Lib "kernel32" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, ByVal lpDefault As String, _
ByVal lpReturnedString As String, ByVal nSize As Long, _
ByVal lpFileName As String) As Long
...
Dim password As String
...
password = GetPrivateProfileString("MyApp", "Password", _
"", value, Len(value), _
App.Path & "\" & "Config.ini")
...
con.ConnectionString = "Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=scott;Passwd=" & password &";"
...
password
. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
password = ''.
...
...
URLRequestDefaults.setLoginCredentialsForHost(hostname, "scott", "");
...
Example 1
indica que la cuenta de usuario "scott" se ha configurado con una contraseña vacía, que un usuario malintencionado puede adivinar fácilmente. Una vez que se haya distribuido el programa, actualizar la cuenta para que utilice una contraseña que no esté vacía requerirá un cambio de código.
...
var storedPassword:String = "";
var temp:String;
if ((temp = readPassword()) != null) {
storedPassword = temp;
}
if(storedPassword.equals(userPassword))
// Access protected resources
...
}
...
readPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, entonces un usuario malintencionado podría eludir trivialmente la comprobación de contraseña si proporciona una cadena vacía para userPassword
.
...
HttpRequest req = new HttpRequest();
req.setClientCertificate('mycert', '');
...
...
NetworkCredential netCred = new NetworkCredential("scott", "", domain);
...
Example 1
es correcto, indica que el inicio de sesión de las credenciales de red "scott" se ha configurado con una contraseña vacía, que un usuario malintencionado puede adivinar fácilmente. Una vez que se haya distribuido el programa, actualizar la cuenta para que utilice una contraseña que no esté vacía requerirá un cambio de código.
...
string storedPassword = "";
string temp;
if ((temp = ReadPassword(storedPassword)) != null) {
storedPassword = temp;
}
if(storedPassword.Equals(userPassword))
// Access protected resources
...
}
...
readPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, entonces un usuario malintencionado podría eludir trivialmente la comprobación de contraseña si proporciona una cadena vacía para userPassword
.
...
rc = SQLConnect(*hdbc, server, SQL_NTS, "scott", SQL_NTS, "", SQL_NTS);
...
Example 1
es correcto, indica que la cuenta de usuario de base de datos "scott" se ha configurado con una contraseña vacía, que un usuario malintencionado puede adivinar fácilmente. Una vez que se haya distribuido el programa, actualizar la cuenta para que utilice una contraseña que no esté vacía requerirá un cambio de código.
...
char *stored_password = "";
readPassword(stored_password);
if(safe_strcmp(stored_password, user_password))
// Access protected resources
...
}
...
readPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, entonces un usuario malintencionado podría eludir trivialmente la comprobación de contraseña si proporciona una cadena vacía para user_password
.
...
<cfquery name = "GetSSNs" dataSource = "users"
username = "scott" password = "">
SELECT SSN
FROM Users
</cfquery>
...
Example 1
es correcto, indica que la cuenta de usuario de base de datos "scott" se ha configurado con una contraseña vacía, que un usuario malintencionado puede adivinar fácilmente. Una vez que se haya distribuido el programa, actualizar la cuenta para que utilice una contraseña que no esté vacía requerirá un cambio de código.
...
var password = "";
var temp;
if ((temp = readPassword()) != null) {
password = temp;
}
if(password == userPassword()) {
// Access protected resources
...
}
...
readPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, un atacante podría eludir trivialmente la comprobación de contraseña si proporciona una cadena vacía para userPassword
.
...
response.SetBasicAuth(usrName, "")
...
...
DriverManager.getConnection(url, "scott", "");
...
Example 1
es correcto, indica que la cuenta de usuario de base de datos "scott" se ha configurado con una contraseña vacía, que un usuario malintencionado puede adivinar fácilmente. Una vez que se haya distribuido el programa, actualizar la cuenta para que utilice una contraseña que no esté vacía requerirá un cambio de código.
...
String storedPassword = "";
String temp;
if ((temp = readPassword()) != null) {
storedPassword = temp;
}
if(storedPassword.equals(userPassword))
// Access protected resources
...
}
...
readPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, entonces un usuario malintencionado podría eludir trivialmente la comprobación de contraseña si proporciona una cadena vacía para userPassword
.
...
webview.setWebViewClient(new WebViewClient() {
public void onReceivedHttpAuthRequest(WebView view,
HttpAuthHandler handler, String host, String realm) {
String username = "";
String password = "";
if (handler.useHttpAuthUsernamePassword()) {
String[] credentials = view.getHttpAuthUsernamePassword(host, realm);
username = credentials[0];
password = credentials[1];
}
handler.proceed(username, password);
}
});
...
Example 2
, si useHttpAuthUsernamePassword()
devuelve false
, un usuario malintencionado podrá ver páginas protegidas si proporciona una contraseña vacía.
...
obj = new XMLHttpRequest();
obj.open('GET','/fetchusers.jsp?id='+form.id.value,'true','scott','');
...
{
...
"password" : ""
...
}
...
rc = SQLConnect(*hdbc, server, SQL_NTS, "scott", SQL_NTS, "", SQL_NTS);
...
Example 1
es correcto, indica que la cuenta de usuario de base de datos "scott" se ha configurado con una contraseña vacía, que un usuario malintencionado puede adivinar fácilmente. Una vez que se haya distribuido el programa, actualizar la cuenta para que utilice una contraseña que no esté vacía requerirá un cambio de código.
...
NSString *stored_password = "";
readPassword(stored_password);
if(safe_strcmp(stored_password, user_password)) {
// Access protected resources
...
}
...
readPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, entonces un usuario malintencionado podría eludir trivialmente la comprobación de contraseña si proporciona una cadena vacía para user_password
.
<?php
...
$connection = mysql_connect($host, 'scott', '');
...
?>
DECLARE
password VARCHAR(20);
BEGIN
password := "";
END;
...
db = mysql.connect("localhost","scott","","mydb")
...
...
conn = Mysql.new(database_host, "scott", "", databasename);
...
Example 1
es correcto, indica que la cuenta de usuario de base de datos "scott" se ha configurado con una contraseña vacía, que un usuario malintencionado puede adivinar fácilmente. Una vez que se haya distribuido el programa, actualizar la cuenta para que utilice una contraseña que no esté vacía requerirá un cambio de código.""
como valor predeterminado de la contraseña cuando no se especifica ninguno. En este caso, también debe asegurarse de que se especifica el número correcto de argumentos para garantizar que la contraseña se pasa a la función.
...
ws.url(url).withAuth("john", "", WSAuthScheme.BASIC)
...
...
let password = ""
let username = "scott"
let con = DBConnect(username, password)
...
Example 1
es correcto, indica que la cuenta de usuario de base de datos "scott" se ha configurado con una contraseña vacía, que un usuario malintencionado puede adivinar fácilmente. Una vez que se haya distribuido el programa, actualizar la cuenta para que utilice una contraseña que no esté vacía requerirá un cambio de código.
...
var stored_password = ""
readPassword(stored_password)
if(stored_password == user_password) {
// Access protected resources
...
}
...
readPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, entonces un usuario malintencionado podría eludir trivialmente la comprobación de contraseña si proporciona una cadena vacía para user_password
.
...
Dim con As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
con.ConnectionString = "Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=scott;Passwd=;"
...
Example 1
es correcto, indica que la cuenta de usuario de base de datos "scott" se ha configurado con una contraseña vacía, que un usuario malintencionado puede adivinar fácilmente. Una vez que se haya distribuido el programa, actualizar la cuenta para que utilice una contraseña que no esté vacía requerirá un cambio de código.
...
password = 'tiger'.
...
...
URLRequestDefaults.setLoginCredentialsForHost(hostname, "scott", "tiger");
...
...
HttpRequest req = new HttpRequest();
req.setClientCertificate('mycert', 'tiger');
...
...
NetworkCredential netCred =
new NetworkCredential("scott", "tiger", domain);
...
...
rc = SQLConnect(*hdbc, server, SQL_NTS, "scott",
SQL_NTS, "tiger", SQL_NTS);
...
...
MOVE "scott" TO UID.
MOVE "tiger" TO PASSWORD.
EXEC SQL
CONNECT :UID
IDENTIFIED BY :PASSWORD
AT :MYCONN
USING :MYSERVER
END-EXEC.
...
...
<cfquery name = "GetSSNs" dataSource = "users"
username = "scott" password = "tiger">
SELECT SSN
FROM Users
</cfquery>
...
...
var password = "foobarbaz";
...
javap -c
para acceder al código desensamblado, que contendrá los valores de las contraseñas utilizadas. El resultado de esta operación puede presentar un aspecto similar al siguiente en relación con el Example 1
:
javap -c ConnMngr.class
22: ldc #36; //String jdbc:mysql://ixne.com/rxsql
24: ldc #38; //String scott
26: ldc #17; //String tiger
password := "letmein"
...
response.SetBasicAuth(usrName, password)
...
DriverManager.getConnection(url, "scott", "tiger");
...
javap -c
para acceder al código desensamblado, que contendrá los valores de las contraseñas utilizadas. El resultado de esta operación puede presentar un aspecto similar al siguiente en relación con el Example 1
:
javap -c ConnMngr.class
22: ldc #36; //String jdbc:mysql://ixne.com/rxsql
24: ldc #38; //String scott
26: ldc #17; //String tiger
...
webview.setWebViewClient(new WebViewClient() {
public void onReceivedHttpAuthRequest(WebView view,
HttpAuthHandler handler, String host, String realm) {
handler.proceed("guest", "allow");
}
});
...
Example 1
, este código se ejecutará correctamente, pero cualquiera que tenga acceso a él, tendrá acceso a la contraseña.
...
obj = new XMLHttpRequest();
obj.open('GET','/fetchusers.jsp?id='+form.id.value,'true','scott','tiger');
...
...
{
"username":"scott"
"password":"tiger"
}
...
...
DriverManager.getConnection(url, "scott", "tiger")
...
javap -c
para acceder al código desensamblado, que contendrá los valores de las contraseñas utilizadas. El resultado de esta operación puede presentar un aspecto similar al siguiente en relación con el Example 1
:
javap -c ConnMngr.class
22: ldc #36; //String jdbc:mysql://ixne.com/rxsql
24: ldc #38; //String scott
26: ldc #17; //String tiger
...
webview.webViewClient = object : WebViewClient() {
override fun onReceivedHttpAuthRequest( view: WebView,
handler: HttpAuthHandler, host: String, realm: String
) {
handler.proceed("guest", "allow")
}
}
...
Example 1
, este código se ejecutará correctamente, pero cualquiera que tenga acceso a él, tendrá acceso a la contraseña.
...
rc = SQLConnect(*hdbc, server, SQL_NTS, "scott",
SQL_NTS, "tiger", SQL_NTS);
...
...
$link = mysql_connect($url, 'scott', 'tiger');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
...
DECLARE
password VARCHAR(20);
BEGIN
password := "tiger";
END;
password = "tiger"
...
response.writeln("Password:" + password)
...
Mysql.new(URI(hostname, 'scott', 'tiger', databasename)
...
...
ws.url(url).withAuth("john", "secret", WSAuthScheme.BASIC)
...
javap -c
para acceder al código desensamblado, que contendrá los valores de las contraseñas utilizadas. El resultado de esta operación puede presentar un aspecto similar al siguiente en relación con el Example 1
:
javap -c MyController.class
24: ldc #38; //String john
26: ldc #17; //String secret
...
let password = "secret"
let username = "scott"
let con = DBConnect(username, password)
...
Ejemplo 2: La siguiente cadena de conexión ODBC utiliza una contraseña con codificación rígida:
...
https://user:secretpassword@example.com
...
...
server=Server;database=Database;UID=UserName;PWD=Password;Encrypt=yes;
...
...
Dim con As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
con.ConnectionString = "Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=scott;Passwd=tiger;"
...
...
credential_settings:
username: scott
password: tiger
...
<form method="get">
Name of new user: <input type="text" name="username">
Password for new user: <input type="password" name="user_passwd">
<input type="submit" name="action" value="Create User">
</form>
method
es GET
, con lo que si se omite el atributo el resultado será el mismo.
...
<param name="foo" class="org.jasypt.util.password.BasicPasswordEncoder">
...
</param>
...
import hashlib
def register(request):
password = request.GET['password']
username = request.GET['username']
hash = hashlib.md5(get_random_salt() + ":" + password).hexdigest()
store(username, hash)
...
require 'openssl'
def register(request)
password = request.params['password']
username = request.params['username']
salt = get_random_salt
hash = OpenSSL::Digest.digest("MD5", salt + ":" + password)
store(username, hash)
end
...
Null
pueden poner en peligro la seguridad.null
a las variables de contraseña no es una buena idea, ya que puede permitir que los usuarios malintencionados omitan la verificación de contraseña o podría indicar que una contraseña en blanco protege los recursos.null
, intenta leer un valor almacenado para la contraseña y lo compara con un valor proporcionado por el usuario.
...
var storedPassword:String = null;
var temp:String;
if ((temp = readPassword()) != null) {
storedPassword = temp;
}
if(Utils.verifyPassword(userPassword, storedPassword))
// Access protected resources
...
}
...
readPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, un atacante podría eludir trivialmente la comprobación de contraseña si proporciona un valor null
para userPassword
.null
a las variables de contraseña nunca es una buena idea, ya que puede permitir que los atacantes eludan la verificación de contraseña o puede indicar que una contraseña vacía protege los recursos.null
, intenta leer un valor almacenado para la contraseña y lo compara con un valor proporcionado por el usuario.
...
string storedPassword = null;
string temp;
if ((temp = ReadPassword(storedPassword)) != null) {
storedPassword = temp;
}
if (Utils.VerifyPassword(storedPassword, userPassword)) {
// Access protected resources
...
}
...
ReadPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, un atacante podría eludir fácilmente la comprobación de contraseña si proporciona un valor null
para userPassword
.null
a las variables de contraseña no es una buena idea, ya que puede permitir que los usuarios malintencionados omitan la verificación de contraseña o podría indicar que una contraseña en blanco protege los recursos.null
, intenta leer un valor almacenado para la contraseña y lo compara con un valor proporcionado por el usuario.
...
string storedPassword = null;
string temp;
if ((temp = ReadPassword(storedPassword)) != null) {
storedPassword = temp;
}
if(Utils.VerifyPassword(storedPassword, userPassword))
// Access protected resources
...
}
...
ReadPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, un atacante podría eludir trivialmente la comprobación de contraseña si proporciona un valor null
para userPassword
.null
a las variables de contraseña no es una buena idea, ya que puede permitir que los usuarios malintencionados omitan la verificación de contraseña o podría indicar que una contraseña en blanco protege los recursos.null
, intenta leer un valor almacenado para la contraseña y lo compara con un valor proporcionado por el usuario.
...
char *stored_password = NULL;
readPassword(stored_password);
if(safe_strcmp(stored_password, user_password))
// Access protected resources
...
}
...
readPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, un atacante podría eludir trivialmente la comprobación de contraseña si proporciona un valor null
para user_password
.null
a las variables de contraseña nunca es una buena idea, ya que puede permitir que los atacantes eludan la verificación de contraseña o puede indicar que una contraseña vacía protege los recursos.null
a las variables de contraseña no es una buena idea ya que puede permitir que los usuarios malintencionados omitan la verificación de contraseña o podría indicar que una contraseña en blanco protege los recursos.null
, intenta leer un valor almacenado para la contraseña y lo compara con un valor proporcionado por el usuario.
...
String storedPassword = null;
String temp;
if ((temp = readPassword()) != null) {
storedPassword = temp;
}
if(Utils.verifyPassword(userPassword, storedPassword))
// Access protected resources
...
}
...
readPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, un atacante podría eludir trivialmente la comprobación de contraseña si proporciona un valor null
para userPassword
.null
, lee credenciales de un almacén WebView de Android si el servidor no las rechazó previamente para la solicitud actual y las usa para configurar la autenticación para ver páginas protegidas.
...
webview.setWebViewClient(new WebViewClient() {
public void onReceivedHttpAuthRequest(WebView view,
HttpAuthHandler handler, String host, String realm) {
String username = null;
String password = null;
if (handler.useHttpAuthUsernamePassword()) {
String[] credentials = view.getHttpAuthUsernamePassword(host, realm);
username = credentials[0];
password = credentials[1];
}
handler.proceed(username, password);
}
});
...
Example 1
, si useHttpAuthUsernamePassword()
devuelve false
, un usuario malintencionado podrá ver páginas protegidas si proporciona una contraseña null
.null
.null
:
...
var password=null;
...
{
password=getPassword(user_data);
...
}
...
if(password==null){
// Assumption that the get didn't work
...
}
...
null
a las variables de contraseña, ya que puede permitir que los atacantes eludan la verificación de contraseña o puede indicar que ninguna contraseña protege los recursos.null
.
{
...
"password" : null
...
}
null
. Las contraseñas Null
pueden poner en peligro la seguridad.null
a las variables de contraseña no es una buena idea, ya que puede permitir que los usuarios malintencionados omitan la verificación de contraseña o podría indicar que una contraseña en blanco protege los recursos.null
, intenta leer un valor almacenado para la contraseña y lo compara con un valor proporcionado por el usuario.
...
NSString *stored_password = NULL;
readPassword(stored_password);
if(safe_strcmp(stored_password, user_password)) {
// Access protected resources
...
}
...
readPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, un atacante podría eludir trivialmente la comprobación de contraseña si proporciona un valor null
para user_password
.null
a las variables de contraseña no es una buena idea, ya que puede permitir que los usuarios malintencionados omitan la verificación de contraseña o podría indicar que una contraseña en blanco protege los recursos.null
, intenta leer un valor almacenado para la contraseña y lo compara con un valor proporcionado por el usuario.
<?php
...
$storedPassword = NULL;
if (($temp = getPassword()) != NULL) {
$storedPassword = $temp;
}
if(strcmp($storedPassword,$userPassword) == 0) {
// Access protected resources
...
}
...
?>
readPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, un atacante podría eludir trivialmente la comprobación de contraseña si proporciona un valor null
para userPassword
.null
a las variables de contraseña no es una buena idea, ya que puede permitir que los usuarios malintencionados omitan la verificación de contraseña o podría indicar que una contraseña en blanco protege los recursos.null
.
DECLARE
password VARCHAR(20);
BEGIN
password := null;
END;
null
a las variables de contraseña no es una buena idea, ya que puede permitir que los usuarios malintencionados omitan la verificación de contraseña o podría indicar que una contraseña en blanco protege los recursos.null
, intenta leer un valor almacenado para la contraseña y lo compara con un valor proporcionado por el usuario.
...
storedPassword = NULL;
temp = getPassword()
if (temp is not None) {
storedPassword = temp;
}
if(storedPassword == userPassword) {
// Access protected resources
...
}
...
getPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, un atacante podría eludir trivialmente la comprobación de contraseña si proporciona un valor null
para userPassword
.nil
a las variables de contraseña no es una buena idea ya que puede permitir que los usuarios malintencionados omitan la verificación de contraseña o podría indicar que una contraseña en blanco protege los recursos.nil
, intenta leer un valor almacenado para la contraseña y lo compara con un valor proporcionado por el usuario.
...
@storedPassword = nil
temp = readPassword()
storedPassword = temp unless temp.nil?
unless Utils.passwordVerified?(@userPassword, @storedPassword)
...
end
...
readPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, un atacante podría eludir trivialmente la comprobación de contraseña si proporciona un valor null
para @userPassword
.nil
como valor predeterminado de la contraseña cuando no se especifica ninguno. En este caso, también debe asegurarse de que se especifica el número correcto de argumentos para garantizar que la contraseña se pasa a la función.null
a las variables de contraseña no es una buena idea, ya que puede permitir que los atacantes omitan la verificación por contraseña o podría indicar que los recursos están protegidos por una contraseña vacía.null
, intenta leer un valor almacenado para la contraseña y lo compara con un valor proporcionado por el usuario.
...
ws.url(url).withAuth("john", null, WSAuthScheme.BASIC)
...
null
. Las contraseñas Null
pueden poner en peligro la seguridad.nil
a las variables de contraseña no es una buena idea ya que puede permitir que los usuarios malintencionados omitan la verificación de contraseña o podría indicar que una contraseña en blanco protege los recursos.null
, intenta leer un valor almacenado para la contraseña y lo compara con un valor proporcionado por el usuario.
...
var stored_password = nil
readPassword(stored_password)
if(stored_password == user_password) {
// Access protected resources
...
}
...
readPassword()
no puede recuperar la contraseña almacenada debido a un error de base de datos o a algún otro problema, un atacante podría eludir trivialmente la comprobación de contraseña si proporciona un valor null
para user_password
.null
a las variables de contraseña no es una buena idea, ya que puede permitir que los usuarios malintencionados omitan la verificación de contraseña o podría indicar que una contraseña en blanco protege los recursos.null
y la utiliza para conectarse a una base de datos.
...
Dim storedPassword As String
Set storedPassword = vbNullString
Dim con As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
con.ConnectionString = "Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=scott;Passwd=" & storedPassword &";"
...
Example 1
es correcto, indica que la cuenta de usuario de base de datos "scott" se ha configurado con una contraseña vacía, que un usuario malintencionado puede adivinar fácilmente. Una vez que se haya distribuido el programa, actualizar la cuenta para que utilice una contraseña que no esté vacía requerirá un cambio de código.
...
* Default username for FTP connection is "scott"
* Default password for FTP connection is "tiger"
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
* Default username for database connection is "scott"
* Default password for database connection is "tiger"
...
...
<!-- Default username for database connection is "scott" -->
<!-- Default password for database connection is "tiger" -->
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
-- Default username for database connection is "scott"
-- Default password for database connection is "tiger"
...
...
# Default username for database connection is "scott"
# Default password for database connection is "tiger"
...
...
#Default username for database connection is "scott"
#Default password for database connection is "tiger"
...
...
// Default username for database connection is "scott"
// Default password for database connection is "tiger"
...
...
'Default username for database connection is "scott"
'Default password for database connection is "tiger"
...
response.sendRedirect("j_security_check?j_username="+usr+"&j_password="+pass);
...
var fs:FileStream = new FileStream();
fs.open(new File("config.properties"), FileMode.READ);
var decoder:Base64Decoder = new Base64Decoder();
decoder.decode(fs.readMultiByte(fs.bytesAvailable, File.systemCharset));
var password:String = decoder.toByteArray().toString();
URLRequestDefaults.setLoginCredentialsForHost(hostname, usr, password);
...
config.properties
puede leer el valor de password
y determinar fácilmente que el valor se ha establecido con la codificación base64. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
string value = regKey.GetValue(passKey).ToString());
byte[] decVal = Convert.FromBase64String(value);
NetworkCredential netCred =
new NetworkCredential(username,decVal.toString(),domain);
...
password
. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
RegQueryValueEx(hkey, TEXT(.SQLPWD.), NULL,
NULL, (LPBYTE)password64, &size64);
Base64Decode(password64, size64, (BYTE*)password, &size);
rc = SQLConnect(*hdbc, server, SQL_NTS, uid,
SQL_NTS, password, SQL_NTS);
...
password64
y determinar fácilmente que el valor se ha establecido con la codificación base64. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
01 RECORDX.
05 UID PIC X(10).
05 PASSWORD PIC X(10).
05 LEN PIC S9(4) COMP.
...
EXEC CICS
READ
FILE('CFG')
INTO(RECORDX)
RIDFLD(ACCTNO)
...
END-EXEC.
CALL "g_base64_decode_inplace" using
BY REFERENCE PASSWORD
BY REFERENCE LEN
ON EXCEPTION
DISPLAY "Requires GLib library" END-DISPLAY
END-CALL.
EXEC SQL
CONNECT :UID
IDENTIFIED BY :PASSWORD
END-EXEC.
...
CFG
puede leer el valor de la contraseña y determinar fácilmente que el valor se ha establecido con la codificación base64. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
file, _ := os.Open("config.json")
decoder := json.NewDecoder(file)
decoder.Decode(&values)
password := base64.StdEncoding.DecodeString(values.Password)
request.SetBasicAuth(values.Username, password)
...
config.json
podrá leer el valor de password
y determinar fácilmente que el valor se ha establecido con la codificación base64. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
Properties prop = new Properties();
prop.load(new FileInputStream("config.properties"));
String password = Base64.decode(prop.getProperty("password"));
DriverManager.getConnection(url, usr, password);
...
config.properties
puede leer el valor de password
y determinar fácilmente que el valor se ha establecido con la codificación base64. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
webview.setWebViewClient(new WebViewClient() {
public void onReceivedHttpAuthRequest(WebView view,
HttpAuthHandler handler, String host, String realm) {
String[] credentials = view.getHttpAuthUsernamePassword(host, realm);
String username = new String(Base64.decode(credentials[0], DEFAULT));
String password = new String(Base64.decode(credentials[1], DEFAULT));
handler.proceed(username, password);
}
});
...
...
obj = new XMLHttpRequest();
obj.open('GET','/fetchusers.jsp?id='+form.id.value,'true','scott','tiger');
...
plist
y la utiliza para descomprimir un archivo protegido con contraseña.
...
NSDictionary *dict= [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Config" ofType:@"plist"]];
NSString *encoded_password = [dict valueForKey:@"encoded_password"];
NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:encoded_password options:0];
NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding];
[SSZipArchive unzipFileAtPath:zipPath toDestination:destPath overwrite:TRUE password:decodedString error:&error];
...
Config.plist
puede leer el valor de encoded_password
y determinar fácilmente que el valor se ha establecido con la codificación base64.
...
$props = file('config.properties', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$password = base64_decode($props[0]);
$link = mysql_connect($url, $usr, $password);
if (!$link) {
die('Could not connect: ' . mysql_error());
}
...
config.properties
puede leer el valor de password
y determinar fácilmente que el valor se ha establecido con la codificación base64. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
props = os.open('config.properties')
password = base64.b64decode(props[0])
link = MySQLdb.connect (host = "localhost",
user = "testuser",
passwd = password,
db = "test")
...
config.properties
puede leer el valor de password
y determinar fácilmente que el valor se ha establecido con la codificación base64. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
require 'pg'
require 'base64'
...
passwd = Base64.decode64(ENV['PASSWD64'])
...
conn = PG::Connection.new(:dbname => "myApp_production", :user => username, :password => passwd, :sslmode => 'require')
PASSWD64
y determinar fácilmente que el valor se ha establecido con la codificación base64. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.
...
val prop = new Properties();
prop.load(new FileInputStream("config.properties"));
val password = Base64.decode(prop.getProperty("password"));
DriverManager.getConnection(url, usr, password);
...
config.properties
puede leer el valor de password
y determinar fácilmente que el valor se ha establecido con la codificación base64. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.plist
y la utiliza para descomprimir un archivo protegido con contraseña.
...
var myDict: NSDictionary?
if let path = NSBundle.mainBundle().pathForResource("Config", ofType: "plist") {
myDict = NSDictionary(contentsOfFile: path)
}
if let dict = myDict {
let password = base64decode(dict["encoded_password"])
zipArchive.unzipOpenFile(zipPath, password:password])
}
...
Config.plist
puede leer el valor de encoded_password
y determinar fácilmente que el valor se ha establecido con la codificación base64.
...
root:qFio7llfVKk.s:19033:0:99999:7:::
...
...
...
Private Declare Function GetPrivateProfileString _
Lib "kernel32" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, ByVal lpDefault As String, _
ByVal lpReturnedString As String, ByVal nSize As Long, _
ByVal lpFileName As String) As Long
...
Dim password As String
...
password = StrConv(DecodeBase64(GetPrivateProfileString("MyApp", "Password", _
"", value, Len(value), _
App.Path & "\" & "Config.ini")), vbUnicode)
...
con.ConnectionString = "Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=scott;Passwd=" & password &";"
...
Config.ini
puede leer el valor de Password
y determinar fácilmente que el valor se ha establecido con la codificación base64. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el sistema.