Liferay 5.2.3 javascript injection vulnerability
Secondo il bug traker di Liferay il ticket LPS-5545 e' sempre aperto e riguarda la versione 5.2.3
Ho testato la vulnerabilita' su Liferay 6 e sembra che sia stata chiusa ( almeno in questa versione ). Allora ho controllato il codice e mi sono accorto che tutto quello che serve per chiudere la falla anche sulla versione 5 ... e' tutto gia' li !!!
Cosa fare
Usate patch di Unix ( linux ) per applicare questa patch ( Attach:LanguageImpl.java.patch ), ricompilate e generate il jar file portal-impl.jar e avete fatto .
Che modifiche sono state fatte
La patch controlla il contenuto del parametro dell'url languageId confrontandolo con una lista di valori accettati ( nello specifico _localesMap e _charEncodings ) che sono gia' disponibili; modifichiamo un pelo il costruttore in modo da assicurarci che le mappe siano compilate :
String[] localesArray = PropsValues.LOCALES;
_locales = new Locale[localesArray.length];
_localesSet = new HashSet<Locale>(localesArray.length);
_localesMap = new HashMap<String, Locale>(localesArray.length);
_charEncodings = new HashMap<String, String>();
for (int i = 0; i < localesArray.length; i++) {
String languageId = localesArray[i];
int pos = languageId.indexOf(StringPool.UNDERLINE);
String language = languageId.substring(0, pos);
//String country = languageId.substring(pos + 1);
Locale locale = LocaleUtil.fromLanguageId(languageId);
_charEncodings.put(locale.toString(), StringPool.UTF8); // backport of white list of language ids
_locales[i] = locale;
if (!_localesMap.containsKey(language)) {//backport of white list of language ids
_localesMap.put(language, locale);
}
_localesSet.add(locale);
//_localesMap.put(language, locale);//backport of white list of language ids
_charEncodings.put(locale.toString(), StringPool.UTF8);
}
}
e aggiungiamo il controllo
in
appena prima di ritornare il language id :
String languageId = ParamUtil.getString(request, "languageId");
if (Validator.isNotNull(languageId)) {
if (_localesMap.containsKey(languageId) || _charEncodings.containsKey(languageId)) {// backport of white list of language ids
return languageId;
}
}
Locale locale = PortalUtil.getLocale(request);
return getLanguageId(locale);
}
Buon patching !!! (:fi:)
Recent Comments